diff --git a/app/Domains/Real/Commands/Sync/MongoSync.php b/app/Domains/Real/Commands/Sync/MongoSync.php index e8820e38..988e475c 100644 --- a/app/Domains/Real/Commands/Sync/MongoSync.php +++ b/app/Domains/Real/Commands/Sync/MongoSync.php @@ -54,7 +54,7 @@ class MongoSync extends Command $values = []; foreach ($res as $key => $value) { - $activate_at = $value['saDate'] ? $value['saDate']->toDateTime()->format('Y-m-d H:i:s') : null; + $activated_at = $value['saDate'] ? $value['saDate']->toDateTime()->format('Y-m-d H:i:s') : null; $sim = intval(preg_replace('/\D/', '', $value['cNo'])); $values[$sim] = [ 'sim' => $sim, @@ -62,7 +62,7 @@ class MongoSync extends Command 'iccid' => $value['iccid'] ?? '', 'bloc_id' => $blocs[$value['comId']] ?? 0, 'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255, - 'activate_at' => $activate_at, + 'activated_at' => $activated_at, 'created_at' => $value['sDate']->toDateTime()->format('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; diff --git a/app/Domains/Real/Repositories/OrderCardRepository.php b/app/Domains/Real/Repositories/OrderCardRepository.php index 400b7bb6..1598d616 100644 --- a/app/Domains/Real/Repositories/OrderCardRepository.php +++ b/app/Domains/Real/Repositories/OrderCardRepository.php @@ -73,10 +73,10 @@ class OrderCardRepository extends Repository $connection = $this->model->getConnection(); $arr = array_map(function ($value) { - return sprintf("(%d, '%s'::timestamp)", $value['sim'], $value['activate_at']); + return sprintf("(%d, '%s'::timestamp)", $value['sim'], $value['activated_at']); }, $data); - $sql = 'UPDATE real_cards SET activate_at = list.activate_at FROM (VALUES ' . implode(',', $arr) . ') AS list(sim, activate_at) WHERE real_cards.sim = list.sim AND real_cards.activate_at IS NULL'; + $sql = 'UPDATE real_cards SET activated_at = list.activated_at FROM (VALUES ' . implode(',', $arr) . ') AS list(sim, activated_at) WHERE real_cards.sim = list.sim AND real_cards.activated_at IS NULL'; return $connection->update($sql); } diff --git a/app/Domains/Virtual/Commands/Sync/CardSync.php b/app/Domains/Virtual/Commands/Sync/CardSync.php index f760188e..885b0f50 100644 --- a/app/Domains/Virtual/Commands/Sync/CardSync.php +++ b/app/Domains/Virtual/Commands/Sync/CardSync.php @@ -4,6 +4,8 @@ namespace App\Domains\Virtual\Commands\Sync; use Carbon\Carbon; use App\Models\Card\Card; +use App\Models\Virtual\Order; +use App\Models\Virtual\OrderCard; use Illuminate\Support\Facades\DB; use App\Domains\Virtual\Services\CommonService; use App\Domains\Virtual\Services\ProductService; @@ -24,12 +26,12 @@ class CardSync extends Command protected $blocs; protected $packages; - protected $product; + protected $products; protected $limit = 1; const FILENAME = 'app/command/sync-card.json'; - const INIT_ID = 0; // '2000-01-01 00:00:00' + const INIT_ID = 0; public function handle() { @@ -40,7 +42,7 @@ class CardSync extends Command $this->saveFile(1, $maxId); $query = DB::connection('vd_old')->table('ckb_custom') - ->select(['id', 'custom_no', 'imsi', 'carrieroperator', 'iccid', 'card_number', 'card_from', 'iccid', 'company', 'custom_state']) + ->select(['id', 'custom_no', 'imsi', 'carrieroperator', 'iccid', 'card_number', 'card_from', 'iccid', 'company', 'custom_state', 'create_time' ,'update_time']) ->where('id', '>', $maxId); $logQuery = DB::connection('vd_old')->table('ckb_custom_handle_log') @@ -53,7 +55,7 @@ class CardSync extends Command if ($total) { $this->blocs = app(BlocRepository::class)->get()->pluck('id', 'shorthand')->toArray(); $this->packages = app(PackageRepository::class)->get()->keyBy('sn'); - $this->product = app(ProductRepository::class)->get()->keyBy('sn'); + $this->products = app(ProductRepository::class)->get()->keyBy('sn'); } $page = 1; @@ -69,15 +71,36 @@ class CardSync extends Command $value = (array)$value; $logs = $logQuery->where('custom_no', $value['custom_no'])->get()->collect(); - $existedCard = Card::where('sim', $value['card_number'])->first(); + $existed = Card::where('sim', $value['card_number'])->first(); - dd($logs); + $card = $this->transformerCard($value, $logs, $existed); + $order = $this->transformerOrder($value, $logs, $existed); + $renewals = $this->transformerRenewals($value, $logs, $existed); + $renewalPackages = $this->transformerRenewalPackages($value, $logs, $existed); + $flows = $this->transformerFlows($value, $logs, $existed); + + DB::beginTransaction(); + + try { + // 写入卡数据 + Card::upsert($card, 'sim'); + + // 写入订单数据 + Order::upsert($order, 'sn'); + + // 写入订单卡关系数据 + OrderCard::upsert([ + 'sim' => $card['sim'], + 'order_id' => $order['id'], + 'company_id' => $order['company_id'], + 'package_id' => $order['package_id'], + ]); + + // 增值包订单 + AddedOrder::upsert(); + } catch (\Exception $e) { + } - $card = $this->transformerCard($value, $logs, $existedCard); - $order = $this->transformerOrder($value, $logs, $existedCard); - $renewals = $this->transformerRenewals($value, $logs, $existedCard); - $renewalPackages = $this->transformerRenewalPackages($value, $logs, $existedCard); - $flows = $this->transformerFlows($value, $logs, $existedCard); $nextId = $value['id']; @@ -94,14 +117,14 @@ class CardSync extends Command } // 卡数据转换 - protected function transformerCard($value, $logs, $existedCard) + protected function transformerCard($value, $logs, $existed) { // 判断卡类型 - $type = ($value['card_number'][3] >= 5) ? 1 : ($existedCard ? 0 : 2); + $type = ($value['card_number'][3] >= 5) ? 1 : ($existed ? 0 : 2); // 激活记录 $activateLog = $logs->where('type', 10)->first(); - $activate_at = $activateLog ? date('Y-m-d H:i:s', $activateLog['valid_start_time']) : null; + $activated_at = $activateLog ? date('Y-m-d H:i:s', $activateLog['valid_start_time']) : null; return [ 'sim' => $value['card_number'], @@ -109,37 +132,44 @@ class CardSync extends Command 'iccid' => $value['iccid'], 'bloc_id' => $this->blocs[$value['card_from']] ?? 0, 'carrier_operator' => self::$carrierOperators[$value['carrieroperator']], - 'activate_at' => $existedCard ? $existedCard->activate_at : $activate_at, - 'virtual_activate_at' => $activate_at, + 'activated_at' => $existed['activated_at'] ?? $activated_at, + 'virtual_activated_at' => $activated_at, 'type' => $type, + 'cancelled_at' => ($value['custom_state'] === 13) ? date('Y-m-d H:i:s', $value['update_time']) : null, + 'created_at' => date('Y-m-d H:i:s', $value['create_time']), + 'updated_at' => date('Y-m-d H:i:s', $value['update_time']), ]; } // 销售记录 - protected function transformerOrder($value, $logs, $existedCard) + protected function transformerOrder($value, $logs, $existed) { - if (!$sellLog = $logs->where('type', 13)->first()) { + if (!$res = $logs->where('type', 13)->first()) { return null; } - $package = $this->getPackage($sellLog['content']); + $package = $this->getPackage($res['content']); - $unit_price = floatval($sellLog['sale_account']) * 100; - $custom_price = floatval($sellLog['order_account']) * 100; + $unit_price = floatval($res['sale_account']) * 100; + $custom_price = floatval($res['order_account']) * 100; - $product = $this->getProduct($package, $sellLog['company'], $unit_price); + $product = $this->getProduct($package, $res['company'], $unit_price); + + // 按规则生成订单编号 (月+公司+产品) + $sn = date('Ym', $res['create_time']) . sprintf('%08d', $custom_price) . sprintf('%04d', $product['id']); $order = [ + 'sn' => $sn, 'type' => 1, - 'company_id' => $sellLog['company'], + 'company_id' => $res['company'], 'package_id' => $package['id'], 'product_id' => $product['id'], - 'pay_channel' => self::$payChannels[$sellLog['pay_type']], + 'pay_channel' => self::$payChannels[$res['pay_type']], 'unit_price' => $unit_price, 'counts' => DB::raw('counts + 1'), 'total_price' => DB::raw("total_price + {$unit_price}"), 'custom_price' => DB::raw("custom_price + {$custom_price}"), - 'order_at' => date('Y-m-d H:i:s'), + 'order_at' => date('Y-m-d H:i:s', $res['create_time']), 'order_status' => 4, 'transaction_status' => 1, ]; @@ -148,35 +178,32 @@ class CardSync extends Command } // 续费记录 - protected function transformerRenewals($value, $logs, $existedCard) + protected function transformerRenewals($value, $logs, $existed) { - $renewalLogs = $logs->where('type', 11)->get(); + $res = $logs->where('type', 11)->values()->all(); - if (empty($renewalLog)) { + if (empty($res)) { return []; } $array = []; - foreach ($renewalLogs as $item) { - $package = $this->getPackage($sellLog['content']); - $unit_price = floatval($sellLog['sale_account']) * 100; - $custom_price = floatval($sellLog['order_account']) * 100; + foreach ($res as $item) { + $package = $this->getPackage($item['content']); + $unit_price = floatval($item['sale_account']) * 100; + $custom_price = floatval($item['order_account']) * 100; + + $sn = date('Ym', $item['create_time']) . sprintf('%04d', $item['company']) . sprintf('%04d', $package['id']) . sprintf('%04d', $custom_price); $array[] = [ 'sn' => $sn, 'type' => 1, - 'company_id' => $sellLog['company'], - 'package_id' => $package['id'], - 'product_id' => $product['id'], - 'pay_channel' => self::$payChannels[$sellLog['pay_type']], + 'company_id' => $item['company'], 'unit_price' => $unit_price, 'counts' => DB::raw('counts + 1'), 'total_price' => DB::raw("total_price + {$unit_price}"), 'custom_price' => DB::raw("custom_price + {$custom_price}"), - 'order_at' => date('Y-m-d H:i:s'), - 'order_status' => 4, - 'transaction_status' => 1, + 'order_at' => date('Y-m-d H:i:s', $item['create_time']), ]; } @@ -184,23 +211,69 @@ class CardSync extends Command } // 续费包记录 - protected function transformerRenewalPackages($value, $logs, $existedCard) + protected function transformerRenewalPackages($value, $logs, $existed) { - $renewalLog = $logs->where('type', 14)->get(); + $res = $logs->where('type', 14)->values()->all(); - if (empty($renewalLog)) { + if (empty($res)) { return []; } + + $array = []; + + foreach ($res as $item) { + $package = $this->getPackage($item['content']); + $unit_price = floatval($item['sale_account']) * 100; + $custom_price = floatval($item['order_account']) * 100; + + $sn = date('Ym', $item['create_time']) . sprintf('%04d', $item['company']) . sprintf('%04d', $package['id']) . sprintf('%04d', $custom_price); + + $array[] = [ + 'sn' => $sn, + 'type' => 2, + 'company_id' => $item['company'], + 'unit_price' => $unit_price, + 'counts' => DB::raw('counts + 1'), + 'total_price' => DB::raw("total_price + {$unit_price}"), + 'custom_price' => DB::raw("custom_price + {$custom_price}"), + 'order_at' => date('Y-m-d H:i:s', $item['create_time']), + ]; + } + + return $array; } // 加油包记录 - protected function transformerFlows($value, $logs, $existedCard) + protected function transformerFlows($value, $logs, $existed) { - $flowsLog = $logs->where('type', 15)->get(); + $res = $logs->where('type', 15)->values()->all(); - if (empty($flowsLog)) { + if (empty($res)) { return []; } + + $array = []; + + foreach ($res as $item) { + $package = $this->getPackage($item['content']); + $unit_price = floatval($item['sale_account']) * 100; + $custom_price = floatval($item['order_account']) * 100; + + $sn = date('Ym', $item['create_time']) . sprintf('%04d', $item['company']) . sprintf('%04d', $package['id']) . sprintf('%04d', $custom_price); + + $array[] = [ + 'sn' => $sn, + 'type' => 3, + 'company_id' => $item['company'], + 'unit_price' => $unit_price, + 'counts' => DB::raw('counts + 1'), + 'total_price' => DB::raw("total_price + {$unit_price}"), + 'custom_price' => DB::raw("custom_price + {$custom_price}"), + 'order_at' => date('Y-m-d H:i:s', $item['create_time']), + ]; + } + + return $array; } /** diff --git a/app/Domains/Virtual/Services/AddedOrderService.php b/app/Domains/Virtual/Services/AddedOrderService.php index a8703830..a2e8dac6 100644 --- a/app/Domains/Virtual/Services/AddedOrderService.php +++ b/app/Domains/Virtual/Services/AddedOrderService.php @@ -197,7 +197,7 @@ class AddedOrderService extends Service } /** - * 生成订单编号 + * 生成订单编号 20位 * * @return void */ @@ -205,4 +205,4 @@ class AddedOrderService extends Service { return date('YmdHis') . explode('.', microtime(true))[1] . sprintf('%02d', rand(0, 99)); } -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 21111296..3145bd18 100644 --- a/composer.lock +++ b/composer.lock @@ -711,17 +711,17 @@ }, { "name": "dipper/sms", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "ssh://gogs@git.fxft.net:2222/composer/sms.git", - "reference": "6d1e67bf54b201fc07d0c83fb41f7c72cdb7fa84" + "reference": "f6ce8e8fb944de4fd15ecddfe2391abd0735d5f2" }, "dist": { "type": "tar", - "url": "https://composer.fxft.online/dist/dipper/sms/dipper-sms-1.0.0-43d071.tar", - "reference": "6d1e67bf54b201fc07d0c83fb41f7c72cdb7fa84", - "shasum": "c3f7557716e9020c06b3ea6fcab4558330fd28c4" + "url": "https://composer.fxft.online/dist/dipper/sms/dipper-sms-1.0.1-ad7a10.tar", + "reference": "f6ce8e8fb944de4fd15ecddfe2391abd0735d5f2", + "shasum": "33e6c8bf293978e8c9e8deb19025523dcbf532bb" }, "require": { "guzzlehttp/guzzle": "~6.0", @@ -744,7 +744,7 @@ } ], "description": "短信发送", - "time": "2018-09-05T05:58:47+00:00" + "time": "2018-12-25T02:38:13+00:00" }, { "name": "dnoegel/php-xdg-base-dir", 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 dc464ff5..739b59e5 100644 --- a/database/migrations/2018_12_24_164218_create_cards_table.php +++ b/database/migrations/2018_12_24_164218_create_cards_table.php @@ -23,9 +23,10 @@ class CreateCardsTable extends Migration $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('activate_at')->nullable()->comment('激活时间'); - $table->timestamp('virtual_activate_at')->nullable()->comment('虚拟激活时间'); - $table->tinyInteger('type')->unsigned()->default(0)->comment('类型(0:真实卡 1:虚拟卡)'); + $table->timestamp('activated_at')->nullable()->comment('激活时间'); + $table->timestamp('virtual_activated_at')->nullable()->comment('虚拟激活时间'); + $table->tinyInteger('type')->unsigned()->default(0)->comment('类型(0:真实卡 1:虚拟卡 2:未知卡)'); + $table->timestamp('cancelled_at')->nullable()->comment('注销时间'); $table->timestamps(); $table->primary('sim'); diff --git a/database/migrations/2018_12_24_164779_create_virtual_orders_table.php b/database/migrations/2018_12_24_164779_create_virtual_orders_table.php index e66d0900..15aa1241 100644 --- a/database/migrations/2018_12_24_164779_create_virtual_orders_table.php +++ b/database/migrations/2018_12_24_164779_create_virtual_orders_table.php @@ -20,7 +20,8 @@ class CreateVirtualOrdersTable extends Migration Schema::create("virtual_orders", function (Blueprint $table) { $table->increments('id')->comment('订单ID'); $table->string('sn', 32)->comment('订单编号'); - $table->tinyInteger('type')->unsigned()->default(0)->comment('订单类型(0:用户订单 1:后台订单)'); + $table->tinyInteger('source')->unsigned()->default(0)->comment('订单来源(0:用户订单 1:后台订单)'); + $table->tinyInteger('type')->unsigned()->default(0)->comment('订单类型(0:基础订单 1:套餐续费 2:续费包 3:加油包 4:可选包 5:附加包)'); $table->integer('company_id')->unsigned()->default(0)->comment("企业ID"); $table->integer('package_id')->unsigned()->default(0)->comment('套餐ID'); $table->integer('product_id')->unsigned()->default(0)->comment('定价ID'); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index a89c7779..9550edb1 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -18,7 +18,6 @@ return array( 'CreateRealCompaniesTable' => $baseDir . '/database/migrations/2018_12_24_164318_create_real_companies_table.php', 'CreateRealOrderCardsTable' => $baseDir . '/database/migrations/2018_12_24_164434_create_real_order_cards_table.php', 'CreateRealOrdersTable' => $baseDir . '/database/migrations/2018_12_24_164430_create_real_orders_table.php', - 'CreateRealPackageCardsTables' => $baseDir . '/database/migrations/2018_12_24_164462_create_real_package_cards_tables.php', 'CreateRealPackagesTable' => $baseDir . '/database/migrations/2018_12_24_164423_create_real_packages_table.php', 'CreateVirtualAddedOrderCardsTables' => $baseDir . '/database/migrations/2018_12_24_170946_create_virtual_added_order_cards_tables.php', 'CreateVirtualAddedOrdersTable' => $baseDir . '/database/migrations/2018_12_24_170936_create_virtual_added_orders_table.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index db365bbb..a3ad70f2 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -721,7 +721,6 @@ class ComposerStaticInite79258a3e34ad3e251999111d9f334d9 'CreateRealCompaniesTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164318_create_real_companies_table.php', 'CreateRealOrderCardsTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164434_create_real_order_cards_table.php', 'CreateRealOrdersTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164430_create_real_orders_table.php', - 'CreateRealPackageCardsTables' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164462_create_real_package_cards_tables.php', 'CreateRealPackagesTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164423_create_real_packages_table.php', 'CreateVirtualAddedOrderCardsTables' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_170946_create_virtual_added_order_cards_tables.php', 'CreateVirtualAddedOrdersTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_170936_create_virtual_added_orders_table.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 883a272b..412db8cd 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -730,25 +730,25 @@ }, { "name": "dipper/sms", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", "url": "ssh://gogs@git.fxft.net:2222/composer/sms.git", - "reference": "6d1e67bf54b201fc07d0c83fb41f7c72cdb7fa84" + "reference": "f6ce8e8fb944de4fd15ecddfe2391abd0735d5f2" }, "dist": { "type": "tar", - "url": "https://composer.fxft.online/dist/dipper/sms/dipper-sms-1.0.0-43d071.tar", - "reference": "6d1e67bf54b201fc07d0c83fb41f7c72cdb7fa84", - "shasum": "c3f7557716e9020c06b3ea6fcab4558330fd28c4" + "url": "https://composer.fxft.online/dist/dipper/sms/dipper-sms-1.0.1-ad7a10.tar", + "reference": "f6ce8e8fb944de4fd15ecddfe2391abd0735d5f2", + "shasum": "33e6c8bf293978e8c9e8deb19025523dcbf532bb" }, "require": { "guzzlehttp/guzzle": "~6.0", "illuminate/support": "5.5.*", "psr/http-message": "~1.0" }, - "time": "2018-09-05T05:58:47+00:00", + "time": "2018-12-25T02:38:13+00:00", "type": "library", "installation-source": "dist", "autoload": { diff --git a/vendor/dipper/sms/src/Messages/InstalledMessage.php b/vendor/dipper/sms/src/Messages/InstalledMessage.php index bf2206cb..5b3f8ff2 100644 --- a/vendor/dipper/sms/src/Messages/InstalledMessage.php +++ b/vendor/dipper/sms/src/Messages/InstalledMessage.php @@ -7,7 +7,6 @@ use Dipper\Sms\Contracts\GatewayInterface; class InstalledMessage extends Message { protected $attributes; - protected $gateways = ['aliyun']; public function __construct(array $attributes) { diff --git a/vendor/dipper/sms/src/Messages/OrderMessage.php b/vendor/dipper/sms/src/Messages/OrderMessage.php index de4aca9a..ddfd5fb0 100644 --- a/vendor/dipper/sms/src/Messages/OrderMessage.php +++ b/vendor/dipper/sms/src/Messages/OrderMessage.php @@ -7,7 +7,6 @@ use Dipper\Sms\Contracts\GatewayInterface; class OrderMessage extends Message { protected $attributes; - protected $gateways = ['aliyun']; public function __construct(array $attributes) { diff --git a/vendor/dipper/sms/src/Messages/VcodeMessage.php b/vendor/dipper/sms/src/Messages/VcodeMessage.php index 3a17304b..e911706f 100644 --- a/vendor/dipper/sms/src/Messages/VcodeMessage.php +++ b/vendor/dipper/sms/src/Messages/VcodeMessage.php @@ -7,7 +7,6 @@ use Dipper\Sms\Contracts\GatewayInterface; class VcodeMessage extends Message { protected $attributes; - protected $gateways = ['aliyun']; public function __construct(array $attributes) {