vd/app/Domains/Virtual/Commands/Sync/PackageSync.php
2018-12-11 17:06:49 +08:00

128 lines
5.3 KiB
PHP

<?php
namespace App\Domains\Virtual\Commands\Sync;
use Carbon\Carbon;
use App\Models\Virtual\Package;
use Illuminate\Support\Facades\DB;
use App\Domains\Virtual\Repositories\CompanyRepository;
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];
public function handle()
{
$datetime = $this->getDateTime();
$basePackages = $this->getBasePackages()->toArray();
$renewalPackages = $this->getRenewalPackages()->toArray();
$flowPackages = $this->getFlowPackages()->toArray();
$packages = array_merge($basePackages, $renewalPackages, $flowPackages);
foreach ($packages as &$item) {
$item['id'] = ($item['type'] + 1) * 1000000 + $item['id'];
}
Package::upsert($packages, 'id');
app(PackageRepository::class)->forgetCached();
}
// 基础包
protected function getBasePackages()
{
$packages = DB::connection('vd_old')->table('ckb_package')->get();
return $packages->map(function ($item) {
return [
'id' => $item->id,
'sn' => $item->package_sn,
'name' => $item->name,
'type' => 0,
'carrier_operator' => self::$carrier_operator[$item->carrieroperator],
'cost_price' => $item->price * 100,
'guide_price' => intval($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_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 ?: '',
'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,
];
});
}
// 续费包
protected function getRenewalPackages()
{
$packages = DB::connection('vd_old')->table('ckb_add_value_package')->where('type', 1)->get();
return $packages->map(function ($item) {
return [
'id' => $item->id,
'sn' => $item->package_sn,
'name' => $item->package_name,
'type' => 1,
'carrier_operator' => self::$carrier_operator[$item->operator],
'cost_price' => floatval($item->price) * 100,
'guide_price' => floatval($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_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 ?: '',
'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,
];
});
}
// 加油包
protected function getFlowPackages()
{
$packages = DB::connection('vd_old')->table('ckb_add_value_package')->where('type', 2)->get();
return $packages->map(function ($item) {
return [
'id' => $item->id,
'sn' => $item->package_sn,
'name' => $item->package_name,
'type' => 2,
'carrier_operator' => self::$carrier_operator[$item->operator],
'cost_price' => floatval($item->price) * 100,
'guide_price' => floatval($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_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 ?: '',
'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,
];
});
}
}