vd/app/Domains/Virtual/Commands/Sync/PackageSync.php
2019-04-11 15:03:16 +08:00

133 lines
5.6 KiB
PHP

<?php
namespace App\Domains\Virtual\Commands\Sync;
use App\Models\Virtual\Package;
use Illuminate\Support\Facades\DB;
use App\Domains\Virtual\Repositories\PackageRepository;
class PackageSync extends Command
{
protected $name = 'virtual:sync-package';
protected $description = '同步VD套餐数据';
protected static $carrier_operator = [10 => 0, 11 => 1, 12 => 2];
protected static $flowedPackages = ['DYD-011','DYD-002','DYD-012','DYD-008','YY-003','Y08','SYY-003','SYY-010','DYF-011','DYF-002','DYF-012','DYF-008','SYY-013','YY-012-01','Y01','Y02','Y03'];
public function handle()
{
DB::table('virtual_packages')->truncate();
$datetime = $this->getDateTime();
$basePackages = $this->getBasePackages()->toArray();
$renewalPackages = $this->getRenewalPackages()->toArray();
$flowPackages = $this->getFlowPackages()->toArray();
$packages = array_merge($basePackages, $renewalPackages, $flowPackages);
Package::upsert($packages, ['sn', 'deleted_at']);
app(PackageRepository::class)->forgetCached();
}
// 基础包
protected function getBasePackages()
{
$packages = DB::connection('vd_old')->table('ckb_package')->get();
return $packages->map(function ($item) {
$flowed = strpos($item->name, 'S') === 0 || in_array($item->name, self::$flowedPackages);
$data = [
'sn' => $item->package_sn,
'name' => trim($item->name),
'type' => 0,
'carrier_operator' => self::$carrier_operator[$item->carrieroperator],
'cost_price' => intval(floatval($item->price) * 100),
'guide_price' => intval(floatval($item->package_rp) * 100),
'flows' => ($item->tag == 10) ? intval($item->package_value) : 0,
'voices' => ($item->tag == 11) ? intval($item->package_value) : 0,
'messages' => 0,
'has_messages' => 0,
'has_lbs' => 0,
'reset_months' => ($item->unit === 'year') ? $item->value * 12 : $item->value,
'service_months' => ($item->cycle_unit === 'year') ? $item->cycle_value * 12 : $item->cycle_value,
'effect_months' => 0,
'delay_months' => 0,
'description' => $item->description ?: '',
'flowed' => intval($flowed),
'created_at' => date('Y-m-d H:i:s', $item->create_time),
'updated_at' => date('Y-m-d H:i:s', $item->update_time),
'deleted_at' => $item->del ? date('Y-m-d H:i:s', $item->update_time) : null,
];
return $data;
});
}
// 续费包
protected function getRenewalPackages()
{
$packages = DB::connection('vd_old')->table('ckb_add_value_package')->where('type', 1)->get();
return $packages->map(function ($item) {
return [
'sn' => $item->package_sn,
'name' => trim($item->package_name),
'type' => 2,
'carrier_operator' => self::$carrier_operator[$item->operator],
'cost_price' => intval($item->price * 100),
'guide_price' => intval($item->guide_price * 100),
'flows' => empty($item->flows) ? 0 : $item->flows,
'voices' => empty($item->voice_num) ? 0 : $item->voice_num,
'messages' => empty($item->sms_num) ? 0 : $item->sms_num,
'has_messages' => empty($item->sms_num) ? 0 : 1,
'has_lbs' => ($item->LBS === 10) ? 1 : 0,
'reset_months' => $item->flows_cycle,
'service_months' => $item->service_cycle,
'effect_months' => ($item->buy_enabled == 10) ? 0 : 1,
'delay_months' => ($item->service_extend == 10) ? 1 : 0,
'description' => $item->package_text ?: '',
'flowed' => strpos($item->package_name, 'S') === 0,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'deleted_at' => $item->del ? date('Y-m-d H:i:s') : null,
];
});
}
// 加油包
protected function getFlowPackages()
{
$packages = DB::connection('vd_old')->table('ckb_add_value_package')->where('type', 2)->get();
return $packages->map(function ($item) {
return [
'sn' => $item->package_sn,
'name' => trim($item->package_name),
'type' => 3,
'carrier_operator' => self::$carrier_operator[$item->operator],
'cost_price' => intval($item->price * 100),
'guide_price' => intval($item->guide_price * 100),
'flows' => empty($item->flows) ? 0 : $item->flows,
'voices' => empty($item->voice_num) ? 0 : $item->voice_num,
'messages' => empty($item->sms_num) ? 0 : $item->sms_num,
'has_messages' => empty($item->sms_num) ? 0 : 1,
'has_lbs' => ($item->LBS === 10) ? 1 : 0,
'reset_months' => $item->flows_cycle,
'service_months' => $item->service_cycle,
'effect_months' => ($item->buy_enabled == 10) ? 0 : 1,
'delay_months' => ($item->service_extend == 10) ? 1 : 0,
'description' => $item->package_text ?: '',
'flowed' => strpos($item->package_name, 'S') === 0,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'deleted_at' => $item->del ? date('Y-m-d H:i:s') : null,
];
});
}
}