同步套餐

This commit is contained in:
邓皓元 2018-11-08 17:29:29 +08:00
parent d22f743b18
commit a656a0a50c
17 changed files with 407 additions and 27 deletions

View File

@ -19,10 +19,11 @@ class Dicts extends Repository
'week' => ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
'weekIso' => ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
'pay_type' => ['微信支付', '支付宝', '银行转账'],
'carrier_operator' => ['联通', '移动', '电信'],
'carrier_operator' => ['联通', '移动', '电信', '全网'],
'service_type' => ['套餐开通', '套餐续费', '套餐更换', '套餐销售'],
'card_status' => ['测试期', '沉默期', '服务期', '已注销'],
'bloc_channel' => ['运营商', '中间商'],
'package_type' => ['基础套餐', '续费包', '加油包', '可选包', '附加包'],
];
public function __construct()

View File

@ -0,0 +1,17 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
class ActivateSync extends Command
{
protected $name = 'sync:activate';
protected $description = '同步RD激活数据';
public function handle()
{
$datetime = $this->getDateTime();
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
use App\Models\Real\Bloc;
use Illuminate\Support\Facades\DB;
class BlocSync extends Command
{
protected $name = 'sync:bloc';
protected $description = '同步RD集团数据';
protected $carrier_operator = ['lt' => 0, 'yd' => 1, 'dx' => 2, 'qw' => 3];
public function handle()
{
$datetime = $this->getDateTime();
$select = ['bloc_code as id', "bloc_name as name", 'carrieroperator as carrier_operator', 'create_time as created_at'];
$data = DB::connection('real')->table('jxc_bloc_manage')->select($select)->where('del', 0)->get()->toArray();
foreach ($data as &$item) {
$item = (array)$item;
$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');
}
Bloc::replace($data);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
use Illuminate\Console\Command as BaseCommand;
use Symfony\Component\Console\Input\InputArgument;
class Command extends BaseCommand
{
protected function getDateTime()
{
if ($month = $this->argument('month')) {
if (!preg_match('/\d{4}-\d{1,2}/', $month)) {
throw new \App\Exceptions\InvalidArgumentException('请输入正确的年月 #示例: 2018-10');
}
return Carbon::parse($month)->startOfMonth();
}
return Carbon::now()->startOfMonth()->subMonth();
}
protected function getArguments()
{
return [
['month', InputArgument::OPTIONAL, '要同步的数据月份,默认上个月 #示例: 2018-10'],
];
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
use App\Models\Real\Company;
use Illuminate\Support\Facades\DB;
class CompanySync extends Command
{
protected $name = 'sync:company';
protected $description = '同步RD企业数据';
public function handle()
{
$datetime = $this->getDateTime();
$sql = "SELECT c.custom_no AS id,c.name,c.create_time AS created_at FROM jxc_user a
INNER JOIN jxc_user_custom_relation b ON a.id=b.uid
INNER JOIN jxc_custom c ON b.custom_no=c.custom_no AND c.del=0
WHERE a.parent_user IN (SELECT id FROM jxc_user WHERE parent_user=3 AND role_tag='normal')";
$data = DB::connection('real')->select($sql);
foreach ($data as &$item) {
$item = (array)$item;
$item['created_at'] = Carbon::parse($item['created_at']);
$item['updated_at'] = date('Y-m-d H:i:s');
}
Company::replace($data);
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
class OrderBaseSync extends Command
{
protected $signature = 'sync:order-base';
protected $description = '同步RD基础订单数据';
public function handle()
{
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
class OrderRenewalSync extends Command
{
protected $signature = 'sync:order-renewal';
protected $description = '同步RD续费订单数据';
public function handle()
{
}
}

View File

@ -0,0 +1,194 @@
<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
use App\Models\Real\Company;
use App\Models\Real\Package;
use Illuminate\Support\Facades\DB;
class PackageSync extends Command
{
protected $name = 'sync:package';
protected $description = '同步RD套餐数据';
protected $companies;
public function handle()
{
$datetime = $this->getDateTime();
$this->companies = Company::all()->pluck('id')->toArray();
$basePackages = $this->getBasePackages();
$renewalPackages = $this->getRenewalPackages();
foreach ($renewalPackages as &$item) {
$item['flows'] = $basePackages[$item['parent_id']]['flows'];
$item['voices'] = $basePackages[$item['parent_id']]['voices'];
$item['messages'] = $basePackages[$item['parent_id']]['messages'];
$item['has_message_switch'] = $basePackages[$item['parent_id']]['has_message_switch'];
$item['has_lbs'] = $basePackages[$item['parent_id']]['has_lbs'];
$item['reset_cycle'] = $basePackages[$item['parent_id']]['reset_cycle'];
}
$flowPackages = $this->getFlowPackages();
$optionalPackages = $this->getOptionalPackages();
$additionalPackages = $this->getAdditionalPackages();
$packages = array_merge($basePackages, $renewalPackages, $flowPackages, $optionalPackages, $additionalPackages);
Package::replace($packages);
}
// 基础包
protected function getBasePackages()
{
$select = [
DB::raw('0 as type'),
'jxc_package.package_sn as id',
'jxc_package.name as name',
'jxc_package.carrieroperator as carrier_operator',
'jxc_package.price as cost_price',
'jxc_package.guide_price as guide_price',
'jxc_package.flows as flows',
'jxc_package.voices as voices',
'jxc_package.short_msg as messages',
'jxc_package.short_msg_on as has_message_switch',
'jxc_package.lbs as has_lbs',
'jxc_package.flow_cycle as reset_cycle',
'jxc_package.package_cycle as service_cycle',
DB::raw("FROM_UNIXTIME(jxc_package.create_time, '%Y-%m-%d %H:%i:%s') as created_at"),
];
$packages = DB::connection('real')->table('jxc_package')->join('jxc_package_custom_relation', function ($join) {
$join->on('jxc_package_custom_relation.package_sn', '=', 'jxc_package.package_sn')
->whereIn('jxc_package_custom_relation.custom_no', $this->companies)
->where('jxc_package_custom_relation.del', 0);
})->select($select)->where('jxc_package.del', 0)->where('type', 11)->get();
return $this->transform($packages);
}
// 续费包
protected function getRenewalPackages()
{
$select = [
DB::raw('1 as type'),
'jxc_package_renewal.bag_number as id',
'jxc_package_renewal.package_sn as parent_id',
'jxc_package_renewal.name as name',
'jxc_package_renewal.price as cost_price',
'jxc_package_renewal.guide_price as guide_price',
'jxc_package_renewal.service_cycle as service_cycle',
'jxc_package_renewal.create_time as created_at',
];
$packages = DB::connection('real')->table('jxc_package_renewal')->join('jxc_package_value_add_relation', function ($join) {
$join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_renewal.bag_number')
->whereIn('jxc_package_value_add_relation.custom_no', $this->companies)
->where('jxc_package_value_add_relation.del', '0')
->where('jxc_package_value_add_relation.type', 1);
})->select($select)->where('jxc_package_renewal.del', '0')->get();
return $this->transform($packages);
}
// 加油包
protected function getFlowPackages()
{
$select = [
DB::raw('2 as type'),
'jxc_package_flows.bag_number as id',
'jxc_package_flows.name as name',
'jxc_package_flows.carrieroperator as carrier_operator',
'jxc_package_flows.price as cost_price',
'jxc_package_flows.guide_price as guide_price',
'jxc_package_flows.flows as flows',
'jxc_package_flows.voices as voices',
'jxc_package_flows.short_msg as messages',
'jxc_package_flows.lbs as has_lbs',
'jxc_package_flows.flows_cycle as reset_cycle',
'jxc_package_flows.service_cycle as service_cycle',
'jxc_package_flows.create_time as created_at',
];
$packages = DB::connection('real')->table('jxc_package_flows')->join('jxc_package_value_add_relation', function ($join) {
$join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_flows.bag_number')
->whereIn('jxc_package_value_add_relation.custom_no', $this->companies)
->where('jxc_package_value_add_relation.del', '0')
->where('jxc_package_value_add_relation.type', 2);
})->select($select)->where('jxc_package_flows.del', '0')->get();
return $this->transform($packages);
}
// 可选包
protected function getOptionalPackages()
{
$select = [
DB::raw('3 as type'),
'jxc_package_optional.bag_number as id',
'jxc_package_optional.name as name',
'jxc_package_optional.carrieroperator as carrier_operator',
'jxc_package_optional.price as cost_price',
'jxc_package_optional.guide_price as guide_price',
'jxc_package_optional.flows as flows',
'jxc_package_optional.voices as voices',
'jxc_package_optional.short_msg as messages',
'jxc_package_optional.lbs as has_lbs',
'jxc_package_optional.flows_cycle as reset_cycle',
'jxc_package_optional.service_cycle as service_cycle',
'jxc_package_optional.create_time as created_at',
];
$packages = DB::connection('real')->table('jxc_package_optional')->join('jxc_package_value_add_relation', function ($join) {
$join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_optional.bag_number')
->whereIn('jxc_package_value_add_relation.custom_no', $this->companies)
->where('jxc_package_value_add_relation.del', '0')
->where('jxc_package_value_add_relation.type', 3);
})->select($select)->where('jxc_package_optional.del', '0')->get();
return $this->transform($packages);
}
// 可选包
protected function getAdditionalPackages()
{
$select = [
DB::raw('4 as type'),
'jxc_package_addoptional.bag_number as id',
'jxc_package_addoptional.name as name',
DB::raw('255 as carrier_operator'),
DB::raw('0 as cost_price'),
'jxc_package_addoptional.guide_price as guide_price',
DB::raw('0 as flows'),
'jxc_package_addoptional.content_count as messages',
'jxc_package_addoptional.reset_cycle as reset_cycle',
'jxc_package_addoptional.service_cycle as service_cycle',
'jxc_package_addoptional.create_time as created_at',
];
$packages = DB::connection('real')->table('jxc_package_addoptional')->join('jxc_package_value_add_relation', function ($join) {
$join->on('jxc_package_value_add_relation.value_add_number', '=', 'jxc_package_addoptional.bag_number')
->whereIn('jxc_package_value_add_relation.custom_no', $this->companies)
->where('jxc_package_value_add_relation.del', '0')
->where('jxc_package_value_add_relation.type', 4);
})->select($select)->where('jxc_package_addoptional.del', '0')->where('jxc_package_addoptional.tid', 1)->get();
return $this->transform($packages);
}
protected function transform($packages)
{
$packages = $packages->toArray();
foreach ($packages as &$package) {
$package = (array)$package;
$package['updated_at'] = date('Y-m-d H:i:s');
}
return array_keyBy($packages, 'id');
}
}

View File

@ -28,8 +28,6 @@ class CreateRealTables extends Migration
$table->string('id', 20)->comment('集团编号');
$table->string('name', 32)->comment('集团名称');
$table->tinyInteger('carrier_operator')->comment('运营商(0:联通 1:移动 2:电信)');
$table->string('city')->comment('城市');
$table->tinyInteger('channel')->comment('渠道(0:运营商 1:中间商)');
$table->timestamps();
$table->primary('id');
@ -52,8 +50,8 @@ class CreateRealTables extends Migration
$table->integer('messages')->unsigned()->default(0)->comment('套餐短信(条)');
$table->tinyInteger('has_message_switch')->unsigned()->default(0)->comment('短信开关0:无 1');
$table->tinyInteger('has_lbs')->unsigned()->default(0)->comment('lbs位置服务0:无 1');
$table->tinyInteger('flow_cycles')->unsigned()->default(0)->comment('流量周期(月)');
$table->tinyInteger('package_cycles')->unsigned()->default(0)->comment('套餐周期(月)');
$table->tinyInteger('reset_cycle')->unsigned()->default(0)->comment('流量周期(月)');
$table->tinyInteger('service_cycle')->unsigned()->default(0)->comment('套餐周期(月)');
$table->timestamps();
$table->primary('id');

View File

@ -19,6 +19,15 @@ class RealServiceProvider extends ServiceProvider
$this->loadMigrationsFrom([realpath(__DIR__ . '/../Database/migrations')]);
// $this->app->make(EloquentFactory::class)->load(realpath(__DIR__ . '/../Database/factories'));
// $this->mergeConfigFrom(realpath(__DIR__ . '/../config.php'), 'domain.real');
$this->commands([
\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\ActivateSync::class,
\App\Domains\Real\Commands\Sync\OrderRenewalSync::class,
]);
}
/**

View File

@ -6,7 +6,6 @@ use App\Core\Model;
use App\Models\Real\Order as RealOrder;
use App\Models\Real\Company as RealCompany;
use App\Models\Real\Package as RealPackage;
use Illuminate\Database\Eloquent\SoftDeletes;
class Card extends Model
{
@ -29,32 +28,32 @@ class Card extends Model
}
// 基础订单
public function realOrderBases()
public function realBasesOrder()
{
return $this->belongsToMany(RealOrder::class, 'real_order_base_card_relations', 'sim' ,'order_id');
return $this->belongsToMany(RealOrder::class, 'real_order_base_card_relations', 'sim', 'order_id');
}
// 续费订单
public function realOrderRenewals()
public function realRenewalOrders()
{
return $this->belongsToMany(RealOrder::class, 'real_order_renewal_card_relations', 'sim' ,'order_id');
return $this->belongsToMany(RealOrder::class, 'real_order_renewal_card_relations', 'sim', 'order_id');
}
// 加油包订单
public function realOrderFlows()
public function realFlowOrders()
{
return $this->belongsToMany(RealOrder::class, 'real_order_flows_card_relations', 'sim' ,'order_id');
return $this->belongsToMany(RealOrder::class, 'real_order_flows_card_relations', 'sim', 'order_id');
}
// 可选包订单
public function realOrderOptional()
public function realOptionalOrders()
{
return $this->belongsToMany(RealOrder::class, 'real_order_optional_card_relations', 'sim' ,'order_id');
return $this->belongsToMany(RealOrder::class, 'real_order_optional_card_relations', 'sim', 'order_id');
}
// 附加包订单
public function realOrderAdditional()
public function realAdditionalOrders()
{
return $this->belongsToMany(RealOrder::class, 'real_order_additional_card_relations', 'sim' ,'order_id');
return $this->belongsToMany(RealOrder::class, 'real_order_additional_card_relations', 'sim', 'order_id');
}
}

View File

@ -7,7 +7,7 @@ use App\Models\Card;
class Bloc extends Model
{
protected $table = 'blocs';
protected $table = 'real_blocs';
public $incrementing = false;

View File

@ -7,7 +7,7 @@ use App\Models\Card;
class Company extends Model
{
protected $table = 'companies';
protected $table = 'real_companies';
public $incrementing = false;

View File

@ -7,33 +7,33 @@ use App\Models\Card;
class Order extends Model
{
protected $table = 'orders';
protected $table = 'real_orders';
public $incrementing = false;
protected $dates = ['order_at', 'service_start_at', 'service_end_at'];
public function cardBases()
public function baseCards()
{
return $this->belongsToMany(Card::class, 'real_order_base_card_relations', 'order_id', 'sim');
}
public function cardRenewals()
public function renewalCards()
{
return $this->belongsToMany(Card::class, 'real_order_renewal_card_relations', 'order_id', 'sim');
}
public function cardFlows()
public function flowCards()
{
return $this->belongsToMany(Card::class, 'real_order_flows_card_relations', 'order_id', 'sim');
}
public function cardOptional()
public function optionalCards()
{
return $this->belongsToMany(Card::class, 'real_order_optional_card_relations', 'order_id', 'sim');
}
public function cardAdditional()
public function additionalCards()
{
return $this->belongsToMany(Card::class, 'real_order_additional_card_relations', 'order_id', 'sim');
}

View File

@ -7,7 +7,7 @@ use App\Models\Card;
class Package extends Model
{
protected $table = 'packages';
protected $table = 'real_packages';
public $incrementing = false;

View File

@ -3,8 +3,13 @@
use Carbon\Carbon;
require_once realpath(dirname(__FILE__) . '/TestCase.php');
$date = new DateTime('2018-10-31');
$date->modify('-1 month');
echo $date->format('Y-m-d');
dd(\DB::connection('mongo')->table('tblCard')->count());
$res = Carbon::parse('2018-10')->endOfMonth()->subMonth();
dd($res);
$conditions = [
'starttime' => Carbon::parse('2018-10-01')->startOfDay(),

View File

@ -432,3 +432,30 @@ if (!function_exists('db_alter')) {
}
}
}
/*
|--------------------------------------------------------------------------
| 数组处理
|--------------------------------------------------------------------------
|
*/
// 修改数组集合键名
if (!function_exists('array_keyBy')) {
function array_keyBy($arr, $key)
{
return array_combine(array_pluck($arr, $key), $arr);
}
}
// 数组集合分组
if (!function_exists('array_groupBy')) {
function array_groupBy($arr, $key)
{
$temp = [];
foreach ($arr as $item) {
$temp[$item[$key]][] = $item;
}
return $temp;
}
}