vd/app/Domains/Real/Commands/Sync/PackageSync.php
2018-11-28 19:09:47 +08:00

223 lines
9.2 KiB
PHP

<?php
namespace App\Domains\Real\Commands\Sync;
use Carbon\Carbon;
use App\Models\Real\Package;
use Illuminate\Support\Facades\DB;
use App\Domains\Real\Services\CommonService;
use App\Domains\Real\Repositories\CompanyRepository;
use App\Domains\Real\Repositories\PackageRepository;
class PackageSync extends Command
{
protected $name = 'real:sync-package';
protected $description = '同步RD套餐数据';
protected $companies;
protected static $carrier_operator = [
'lt' => 0,
'yd' => 1,
'dx' => 2,
'qw' => 3,
];
public function handle()
{
$datetime = $this->getDateTime();
$this->companies = app(CompanyRepository::class)->get()->pluck('id')->toArray();
$this->companies = array_map([CommonService::class, 'stringifyCompanyId'], $this->companies);
$basePackages = $this->getBasePackages();
$renewalPackages = $this->getRenewalPackages();
foreach ($renewalPackages as &$item) {
$item['carrier_operator'] = $basePackages[$item['parent_id']]['carrier_operator'];
$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_months'] = $basePackages[$item['parent_id']]['reset_months'];
}
$flowPackages = $this->getFlowPackages();
$optionalPackages = $this->getOptionalPackages();
$additionalPackages = $this->getAdditionalPackages();
$packages = array_merge($basePackages, $renewalPackages, $flowPackages, $optionalPackages, $additionalPackages);
Package::upsert($packages, 'id');
app(PackageRepository::class)->forgetCached();
}
// 基础包
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_months',
'jxc_package.package_cycle as service_months',
'jxc_package.del as del',
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);
})->select($select)->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_months',
'jxc_package_renewal.create_time as created_at',
'jxc_package_renewal.del',
];
$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.type', 1);
})->select($select)->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_months',
'jxc_package_flows.service_cycle as service_months',
'jxc_package_flows.create_time as created_at',
'jxc_package_flows.del',
];
$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.type', 2);
})->select($select)->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_months',
'jxc_package_optional.service_cycle as service_months',
'jxc_package_optional.create_time as created_at',
'jxc_package_optional.del',
];
$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.type', 3);
})->select($select)->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('"qw" 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_months',
'jxc_package_addoptional.service_cycle as service_months',
'jxc_package_addoptional.create_time as created_at',
'jxc_package_addoptional.del',
];
$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.type', 4);
})->select($select)->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['parent_id'] = $package['parent_id'] ?? '';
$package['carrier_operator'] = self::$carrier_operator[$package['carrier_operator']] ?? 255;
$package['cost_price'] = $package['cost_price'] ?? 0;
$package['guide_price'] = $package['guide_price'] ?? 0;
$package['flows'] = $package['flows'] ?? 0;
$package['voices'] = $package['voices'] ?? 0;
$package['messages'] = $package['messages'] ?? 0;
$package['has_message_switch'] = $package['has_message_switch'] ?? 0;
$package['has_lbs'] = $package['has_lbs'] ?? 0;
$package['reset_months'] = $package['reset_months'] ?? 0;
$package['service_months'] = $package['service_months'] ?? 0;
$package['updated_at'] = date('Y-m-d H:i:s');
$package['deleted_at'] = $package['del'] ? date('Y-m-d H:i:s') : null;
unset($package['del']);
}
return array_keyBy($packages, 'id');
}
}