This commit is contained in:
邓皓元 2018-12-25 10:51:10 +08:00
parent bff82c1bb4
commit eb2eae3d3b
13 changed files with 143 additions and 73 deletions

View File

@ -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'),
];

View File

@ -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);
}

View File

@ -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;
}
/**

View File

@ -197,7 +197,7 @@ class AddedOrderService extends Service
}
/**
* 生成订单编号
* 生成订单编号 20
*
* @return void
*/

12
composer.lock generated
View File

@ -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",

View File

@ -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');

View File

@ -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');

View File

@ -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',

View File

@ -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',

View File

@ -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": {

View File

@ -7,7 +7,6 @@ use Dipper\Sms\Contracts\GatewayInterface;
class InstalledMessage extends Message
{
protected $attributes;
protected $gateways = ['aliyun'];
public function __construct(array $attributes)
{

View File

@ -7,7 +7,6 @@ use Dipper\Sms\Contracts\GatewayInterface;
class OrderMessage extends Message
{
protected $attributes;
protected $gateways = ['aliyun'];
public function __construct(array $attributes)
{

View File

@ -7,7 +7,6 @@ use Dipper\Sms\Contracts\GatewayInterface;
class VcodeMessage extends Message
{
protected $attributes;
protected $gateways = ['aliyun'];
public function __construct(array $attributes)
{