From a656a0a50c36eaa9116e2fa6366a53f3894e29b9 Mon Sep 17 00:00:00 2001 From: denghy Date: Thu, 8 Nov 2018 17:29:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=A5=97=E9=A4=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Dicts.php | 3 +- .../Real/Commands/Sync/ActivateSync.php | 17 ++ app/Domains/Real/Commands/Sync/BlocSync.php | 34 +++ app/Domains/Real/Commands/Sync/Command.php | 30 +++ .../Real/Commands/Sync/CompanySync.php | 34 +++ .../Real/Commands/Sync/OrderBaseSync.php | 16 ++ .../Real/Commands/Sync/OrderRenewalSync.php | 16 ++ .../Real/Commands/Sync/PackageSync.php | 194 ++++++++++++++++++ .../2018_11_07_093322_create_real_tables.php | 6 +- .../Real/Providers/RealServiceProvider.php | 9 + app/Models/Card.php | 23 +-- app/Models/Real/Bloc.php | 2 +- app/Models/Real/Company.php | 2 +- app/Models/Real/Order.php | 12 +- app/Models/Real/Package.php | 2 +- tests/ExampleTest.php | 7 +- vendor/dipper/foundation/src/helpers.php | 27 +++ 17 files changed, 407 insertions(+), 27 deletions(-) create mode 100644 app/Domains/Real/Commands/Sync/ActivateSync.php create mode 100644 app/Domains/Real/Commands/Sync/BlocSync.php create mode 100644 app/Domains/Real/Commands/Sync/Command.php create mode 100644 app/Domains/Real/Commands/Sync/CompanySync.php create mode 100644 app/Domains/Real/Commands/Sync/OrderBaseSync.php create mode 100644 app/Domains/Real/Commands/Sync/OrderRenewalSync.php create mode 100644 app/Domains/Real/Commands/Sync/PackageSync.php diff --git a/app/Dicts.php b/app/Dicts.php index 95a739c4..f9b30174 100644 --- a/app/Dicts.php +++ b/app/Dicts.php @@ -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() diff --git a/app/Domains/Real/Commands/Sync/ActivateSync.php b/app/Domains/Real/Commands/Sync/ActivateSync.php new file mode 100644 index 00000000..79746636 --- /dev/null +++ b/app/Domains/Real/Commands/Sync/ActivateSync.php @@ -0,0 +1,17 @@ +getDateTime(); + } +} diff --git a/app/Domains/Real/Commands/Sync/BlocSync.php b/app/Domains/Real/Commands/Sync/BlocSync.php new file mode 100644 index 00000000..85152b50 --- /dev/null +++ b/app/Domains/Real/Commands/Sync/BlocSync.php @@ -0,0 +1,34 @@ + 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); + } +} diff --git a/app/Domains/Real/Commands/Sync/Command.php b/app/Domains/Real/Commands/Sync/Command.php new file mode 100644 index 00000000..a763afeb --- /dev/null +++ b/app/Domains/Real/Commands/Sync/Command.php @@ -0,0 +1,30 @@ +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'], + ]; + } +} diff --git a/app/Domains/Real/Commands/Sync/CompanySync.php b/app/Domains/Real/Commands/Sync/CompanySync.php new file mode 100644 index 00000000..3769b60a --- /dev/null +++ b/app/Domains/Real/Commands/Sync/CompanySync.php @@ -0,0 +1,34 @@ +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); + } +} diff --git a/app/Domains/Real/Commands/Sync/OrderBaseSync.php b/app/Domains/Real/Commands/Sync/OrderBaseSync.php new file mode 100644 index 00000000..e0ff9504 --- /dev/null +++ b/app/Domains/Real/Commands/Sync/OrderBaseSync.php @@ -0,0 +1,16 @@ +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'); + } +} diff --git a/app/Domains/Real/Database/migrations/2018_11_07_093322_create_real_tables.php b/app/Domains/Real/Database/migrations/2018_11_07_093322_create_real_tables.php index 1bb58dbc..69ef9b61 100644 --- a/app/Domains/Real/Database/migrations/2018_11_07_093322_create_real_tables.php +++ b/app/Domains/Real/Database/migrations/2018_11_07_093322_create_real_tables.php @@ -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'); diff --git a/app/Domains/Real/Providers/RealServiceProvider.php b/app/Domains/Real/Providers/RealServiceProvider.php index 7b7ec019..7a06834e 100644 --- a/app/Domains/Real/Providers/RealServiceProvider.php +++ b/app/Domains/Real/Providers/RealServiceProvider.php @@ -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, + ]); } /** diff --git a/app/Models/Card.php b/app/Models/Card.php index 8ce11340..6704b98f 100644 --- a/app/Models/Card.php +++ b/app/Models/Card.php @@ -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'); } } diff --git a/app/Models/Real/Bloc.php b/app/Models/Real/Bloc.php index bcf00822..bac5cbf4 100644 --- a/app/Models/Real/Bloc.php +++ b/app/Models/Real/Bloc.php @@ -7,7 +7,7 @@ use App\Models\Card; class Bloc extends Model { - protected $table = 'blocs'; + protected $table = 'real_blocs'; public $incrementing = false; diff --git a/app/Models/Real/Company.php b/app/Models/Real/Company.php index 9211dbdb..af0bd856 100644 --- a/app/Models/Real/Company.php +++ b/app/Models/Real/Company.php @@ -7,7 +7,7 @@ use App\Models\Card; class Company extends Model { - protected $table = 'companies'; + protected $table = 'real_companies'; public $incrementing = false; diff --git a/app/Models/Real/Order.php b/app/Models/Real/Order.php index e8d13d97..3b8c7727 100644 --- a/app/Models/Real/Order.php +++ b/app/Models/Real/Order.php @@ -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'); } diff --git a/app/Models/Real/Package.php b/app/Models/Real/Package.php index d32bc855..99d20b1b 100644 --- a/app/Models/Real/Package.php +++ b/app/Models/Real/Package.php @@ -7,7 +7,7 @@ use App\Models\Card; class Package extends Model { - protected $table = 'packages'; + protected $table = 'real_packages'; public $incrementing = false; diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php index 328afbd7..c0b069be 100644 --- a/tests/ExampleTest.php +++ b/tests/ExampleTest.php @@ -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(), diff --git a/vendor/dipper/foundation/src/helpers.php b/vendor/dipper/foundation/src/helpers.php index 35255948..b54cd847 100644 --- a/vendor/dipper/foundation/src/helpers.php +++ b/vendor/dipper/foundation/src/helpers.php @@ -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; + } +}