web
This commit is contained in:
parent
4ce6b81341
commit
806eba208a
@ -6,6 +6,7 @@ use App\Core\Service;
|
||||
use App\Models\Card\Card;
|
||||
use Illuminate\Support\Carbon;
|
||||
use App\Models\Virtual\OrderCard;
|
||||
use App\Models\Virtual\OrderCardPartition;
|
||||
use App\Domains\Card\Repositories\CardRepository;
|
||||
use App\Domains\Virtual\Repositories\OrderCardRepository;
|
||||
|
||||
@ -14,6 +15,8 @@ class CardService extends Service
|
||||
protected $orderCardRepository;
|
||||
protected $cardRepository;
|
||||
|
||||
protected static $typeNames = ['基础套餐', '基础续费', '续费包'];
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
@ -50,30 +53,41 @@ class CardService extends Service
|
||||
{
|
||||
$cards->load([
|
||||
'card:sim,imsi,iccid,virtual_activated_at,cancelled_at',
|
||||
'company:id,name',
|
||||
'package:id,name,carrier_operator,service_months',
|
||||
'renewals:name,type,service_months',
|
||||
'renewalPackages:name,type,service_months'
|
||||
]);
|
||||
|
||||
$carrierOperators = app(Dicts::class)->get('carrier_operator');
|
||||
$cardStatus = app(Dicts::class)->get('card_status');
|
||||
|
||||
$cards->transform(function ($item) use ($carrierOperators, $cardStatus) {
|
||||
$status = static::getStatus($item->card);
|
||||
$timelines = static::timelines($item);
|
||||
$timelines = OrderCardPartition::select(['sim', 'type', 'package_id', 'service_start_at', 'service_end_at'])
|
||||
->whereIn('sim', $cards->pluck('sim')->toArray())->orderBy('created_at')->get();
|
||||
|
||||
$service_start_at = min(array_pluck($timelines, 'starttime'));
|
||||
$service_end_at = max(array_pluck($timelines, 'endtime'));
|
||||
$timelines->map(function ($item) {
|
||||
$package = app(PackageService::class)->load($item->package_id);
|
||||
$item->type_name = self::$typeNames[$item->type];
|
||||
$item->name = $package['name'];
|
||||
$item->service_start_at = Carbon::parse($item->service_start_at)->format('Y-m');
|
||||
$item->service_end_at = Carbon::parse($item->service_end_at)->format('Y-m');
|
||||
});
|
||||
|
||||
$timelines = $timelines->groupBy('sim');
|
||||
|
||||
$cards->transform(function ($item) use ($carrierOperators, $cardStatus, $timelines) {
|
||||
$status = static::getStatus($item->card);
|
||||
$_timelines = $timelines[$item->sim];
|
||||
|
||||
$company = app(CompanyService::class)->load($item->company_id);
|
||||
$package = app(PackageService::class)->load($item->package_id);
|
||||
$service_start_at = min(array_pluck($_timelines, 'service_start_at'));
|
||||
$service_end_at = max(array_pluck($_timelines, 'service_end_at'));
|
||||
|
||||
return collect([
|
||||
'id' => sprintf('No%011d', $item->id),
|
||||
'sim' => $item->sim,
|
||||
'imsi' => $item->card['imsi'],
|
||||
'iccid' => $item->card['iccid'],
|
||||
'carrier_operator' => $carrierOperators[$item->package['carrier_operator']],
|
||||
'company_name' => $item->company['name'],
|
||||
'package_name' => $item->package['name'],
|
||||
'carrier_operator' => $carrierOperators[$package['carrier_operator']],
|
||||
'company_name' => $company['name'],
|
||||
'package_name' => $package['name'],
|
||||
'virtual_activated_at' => (string)$item->card['virtual_activated_at'],
|
||||
'status' => $status,
|
||||
'status_name' => $cardStatus[$status],
|
||||
@ -81,7 +95,7 @@ class CardService extends Service
|
||||
'updated_at' => (string)$item->updated_at,
|
||||
'service_start_at' => $service_start_at,
|
||||
'service_end_at' => $service_end_at,
|
||||
'timelines' => $timelines,
|
||||
'timelines' => $_timelines,
|
||||
]);
|
||||
});
|
||||
|
||||
@ -98,57 +112,4 @@ class CardService extends Service
|
||||
{
|
||||
return $card['virtual_activated_at'] ? ($card['cancelled_at'] ? 3 : 2) : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生命周期
|
||||
* @param OrderCard $item
|
||||
*/
|
||||
public static function timelines($item)
|
||||
{
|
||||
$array = [];
|
||||
|
||||
$virtual_activated_at = $item->card['virtual_activated_at'] ? Carbon::parse($item->card['virtual_activated_at'])->format('Y-m') : '';
|
||||
|
||||
// 基础套餐
|
||||
$array[] = [
|
||||
'type' => 0,
|
||||
'name' => $item->package['name'],
|
||||
'starttime' => $item->card['virtual_activated_at'] ? Carbon::parse($item->card['virtual_activated_at'])->format('Y-m') : '',
|
||||
'endtime' => $virtual_activated_at ? Carbon::parse($virtual_activated_at)->addMonths($item->package['service_months'])->format('Y-m') : '',
|
||||
];
|
||||
|
||||
// 续费套餐
|
||||
$packages = $item->renewals->merge($item->renewalPackages);
|
||||
|
||||
$packages = $packages->sortBy(function ($value) {
|
||||
return $value->pivot->created_at;
|
||||
});
|
||||
|
||||
$packages->map(function ($package) use ($next, $virtual_activated_at, &$array) {
|
||||
if (!$virtual_activated_at) {
|
||||
$starttime = $endtime = '';
|
||||
} else {
|
||||
$starttime = (Carbon::parse($package->pivot->created_at) < Carbon::parse($next)) ? Carbon::parse($next) : Carbon::parse($package->pivot->created_at);
|
||||
$endtime = $starttime->copy()->addMonths($package['service_months'] * $package->pivot->counts);
|
||||
$next = $endtime;
|
||||
$starttime = $starttime->format('Y-m');
|
||||
$endtime = $endtime->format('Y-m');
|
||||
}
|
||||
|
||||
$array[] = [
|
||||
'type' => $package->type + 1,
|
||||
'name' => $package->name,
|
||||
'starttime' => $starttime,
|
||||
'endtime' => $endtime,
|
||||
];
|
||||
});
|
||||
|
||||
$typeNames = ['基础套餐', '基础续费', '续费包'];
|
||||
|
||||
foreach ($array as $key => &$value) {
|
||||
$value['type_name'] = $typeNames[$value['type']];
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
|
@ -3,28 +3,12 @@
|
||||
namespace App\Models\Virtual;
|
||||
|
||||
use App\Core\Model;
|
||||
use App\Models\HasCompositePrimaryKey;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use App\Models\Virtual\Relations\OrderRelations;
|
||||
|
||||
class OrderCardPartition extends Model
|
||||
{
|
||||
use SoftDeletes, OrderRelations, HasCompositePrimaryKey;
|
||||
use SoftDeletes, OrderRelations;
|
||||
|
||||
protected $table = 'virtual_order_cards';
|
||||
|
||||
public function renewals()
|
||||
{
|
||||
return $this->belongsToMany(Package::class, 'virtual_order_renewal_cards', 'sim', 'package_id', 'sim', 'id')->withPivot('created_at', 'counts');
|
||||
}
|
||||
|
||||
public function renewalPackages()
|
||||
{
|
||||
return $this->belongsToMany(Package::class, 'virtual_order_renewal_package_cards', 'sim', 'package_id', 'sim', 'id')->withPivot('created_at', 'counts');
|
||||
}
|
||||
|
||||
public function flowPackages()
|
||||
{
|
||||
return $this->belongsToMany(Package::class, 'virtual_order_flows_package_cards', 'sim', 'package_id', 'sim', 'id')->withPivot('created_at', 'counts');
|
||||
}
|
||||
protected $table = 'virtual_order_cards_partition';
|
||||
}
|
||||
|
@ -122,7 +122,6 @@ AS $$
|
||||
DECLARE
|
||||
order_row RECORD;
|
||||
BEGIN
|
||||
RAISE NOTICE '% - %', NEW.sim, NEW.virtual_activated_at;
|
||||
IF (TG_OP = 'INSERT') THEN
|
||||
-- 插入数据
|
||||
SELECT
|
||||
|
@ -55,7 +55,7 @@
|
||||
<Row>
|
||||
<Col span="8">{{item.name}}</Col>
|
||||
<Col span="8">{{item.type_name}}</Col>
|
||||
<Col span="8">{{item.starttime}} 至 {{item.endtime}}</Col>
|
||||
<Col span="8">{{item.service_start_at}} 至 {{item.service_end_at}}</Col>
|
||||
</Row>
|
||||
</li>
|
||||
</ul>
|
||||
|
2
public/js/app.5a1c2656.js
Normal file
2
public/js/app.5a1c2656.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/app.5a1c2656.js.map
Normal file
1
public/js/app.5a1c2656.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-bd098298.8011ee29.js
Normal file
2
public/js/chunk-bd098298.8011ee29.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-bd098298.8011ee29.js.map
Normal file
1
public/js/chunk-bd098298.8011ee29.js.map
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=\favicon.ico><script src=\config.js></script><title></title><link href=/css/chunk-bd098298.36d75fd0.css rel=prefetch><link href=/js/chunk-00ae0766.9e6b7bf3.js rel=prefetch><link href=/js/chunk-bd098298.41031d8f.js rel=prefetch><link href=/css/app.36043160.css rel=preload as=style><link href=/css/chunk-vendors.3c3b2e85.css rel=preload as=style><link href=/js/app.55e13136.js rel=preload as=script><link href=/js/chunk-vendors.02a4e5bc.js rel=preload as=script><link href=/css/chunk-vendors.3c3b2e85.css rel=stylesheet><link href=/css/app.36043160.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有启用JavaScript,程序不能正常工作,若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.02a4e5bc.js></script><script src=/js/app.55e13136.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=\favicon.ico><script src=\config.js></script><title></title><link href=/css/chunk-bd098298.36d75fd0.css rel=prefetch><link href=/js/chunk-00ae0766.9e6b7bf3.js rel=prefetch><link href=/js/chunk-bd098298.8011ee29.js rel=prefetch><link href=/css/app.36043160.css rel=preload as=style><link href=/css/chunk-vendors.3c3b2e85.css rel=preload as=style><link href=/js/app.5a1c2656.js rel=preload as=script><link href=/js/chunk-vendors.02a4e5bc.js rel=preload as=script><link href=/css/chunk-vendors.3c3b2e85.css rel=stylesheet><link href=/css/app.36043160.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有启用JavaScript,程序不能正常工作,若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.02a4e5bc.js></script><script src=/js/app.5a1c2656.js></script></body></html>
|
Loading…
x
Reference in New Issue
Block a user