vd/app/Domains/Real/Commands/Sync/PackageSync.php
2018-11-29 14:37:09 +08:00

211 lines
8.0 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',
'jxc_package.description as description',
DB::raw("FROM_UNIXTIME(jxc_package.create_time, '%Y-%m-%d %H:%i:%s') as created_at"),
];
$packages = DB::connection('real')->table('jxc_package')->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',
'jxc_package_renewal.remark as description',
];
$packages = DB::connection('real')->table('jxc_package_renewal')->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',
'jxc_package_flows.remark as description',
];
$packages = DB::connection('real')->table('jxc_package_flows')->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',
'jxc_package_optional.remark as description',
];
$packages = DB::connection('real')->table('jxc_package_optional')->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',
'jxc_package_addoptional.package_remark as description',
];
$packages = DB::connection('real')->table('jxc_package_addoptional')->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'] = floatval($package['cost_price']) * 100;
$package['guide_price'] = floatval($package['guide_price']) * 100;
$package['flows'] = intval($package['flows']);
$package['voices'] = intval($package['voices']);
$package['messages'] = intval($package['messages']);
$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']);
ksort($package);
}
return array_keyBy($packages, 'id');
}
}