替卡方式

This commit is contained in:
邓皓元 2019-04-18 09:21:39 +08:00
parent a35fd9569a
commit 0df7e107ec

View File

@ -255,9 +255,8 @@ class OrderService extends Service
}
}
/**
* 转销售方式
if (count($news)) {
// 用转销售方式创建
if ($attributes['use_type'] === 1 && count($news)) {
// 创建订单
$newOrderData = array_except($attributes, ['selected', 'sign']);
$newOrderData['id'] = ++$maxId;
@ -298,16 +297,16 @@ class OrderService extends Service
if (in_array($item['sim'], $news)) {
$counts = $item['counts'] - 1;
$selectedNews[$item['sim']] = [
'sim' => $item['sim'],
'counts' => $counts
];
'sim' => $item['sim'],
'counts' => $counts
];
continue;
}
$selectedNews[$item['sim']] = [
'sim' => $item['sim'],
'counts' => $item['counts'],
];
'sim' => $item['sim'],
'counts' => $item['counts'],
];
}
$selectedNews = array_filter($selectedNews, function ($item) {
@ -316,44 +315,11 @@ class OrderService extends Service
$attributes['counts'] = array_sum(array_pluck($selectedNews, 'counts'));
$attributes['selected'] = array_values($selectedNews);
}
*/
/** 用原有卡替换方式 */
if (count($news)) {
$replacement = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))
->mergeBindings($subQuery->getQuery())
->select(['sim'])
->orderBy('service_end_at')
->where('service_end_at', '<', Carbon::now()->subMonths(6)->endOfMonth())
->limit(count($news))
->get()->pluck('sim')->toArray();
if (count($replacement) !== count($news)) {
throw new NotAllowedException('可替换的卡量不足,不能进行转销售操作');
}
$updates = [];
foreach ($news as $key => $value) {
$updates[] = [
'sim' => $value,
'original_sim' => $replacement[$key],
];
}
$parameters = implode(',', array_map(function ($item) {
return "({$item['sim']}, {$item['original_sim']})";
}, $updates));
$sql = "WITH RECURSIVE as_table(sim, original_sim) AS (VALUES {$parameters})
UPDATE virtual_order_cards_partition SET sim = as_table.sim, original_sim = as_table.original_sim
FROM as_table WHERE virtual_order_cards_partition.sim = as_table.original_sim
";
DB::statement($sql);
$news = [];
}
if (count($extras)) {
// 替卡方式
if (count($news) || count($extras)) {
$attributes['package_id'] = $attributes['package_id'] ?? $product->package_id;
$having = "MAX(service_end_at) < '%s'";
@ -366,31 +332,59 @@ class OrderService extends Service
->where('original_sim', 0)
->groupBy('sim');
$replacement = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))
$replacementQuery = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))
->mergeBindings($subQuery->getQuery())
->select(['sim'])
->orderBy('service_end_at')
->where('service_end_at', '<', Carbon::now()->subMonths(6)->endOfMonth())
->limit(count($extras))
->get()->pluck('sim')->toArray();
->where('service_end_at', '<', Carbon::now()->subMonths(6)->endOfMonth());
if (count($replacement) !== count($extras)) {
throw new NotAllowedException('可替换的卡量不足,不能进行转销售操作');
if (count($news)) {
$replacement = $replacementQuery->limit(count($news))->get()->pluck('sim')->toArray();
if (count($replacement) !== count($news)) {
throw new NotAllowedException('可替换的卡量不足,不能进行转销售操作');
}
$updates = [];
foreach ($news as $key => $value) {
$updates[] = [
'sim' => $value,
'original_sim' => $replacement[$key],
];
}
$parameters = implode(',', array_map(function ($item) {
return "({$item['sim']}, {$item['original_sim']})";
}, $updates));
$sql = "WITH RECURSIVE as_table(sim, original_sim) AS (VALUES {$parameters})
UPDATE virtual_order_cards_partition SET sim = as_table.sim, original_sim = as_table.original_sim
FROM as_table WHERE virtual_order_cards_partition.sim = as_table.original_sim
";
DB::statement($sql);
}
$updates = [];
foreach ($extras as $key => $value) {
$updates[] = [
if (count($extras)) {
$replacement = $replacementQuery->limit(count($extras))->get()->pluck('sim')->toArray();
if (count($replacement) !== count($extras)) {
throw new NotAllowedException('可替换的卡量不足,不能进行转销售操作');
}
$updates = [];
foreach ($extras as $key => $value) {
$updates[] = [
'sim' => $value,
'original_sim' => $replacement[$key],
];
}
}
$parameters = implode(',', array_map(function ($item) {
return "({$item['sim']}, {$item['original_sim']})";
}, $updates));
$parameters = implode(',', array_map(function ($item) {
return "({$item['sim']}, {$item['original_sim']})";
}, $updates));
$sql = "WITH RECURSIVE as_table(sim, original_sim) AS (VALUES {$parameters}), update_olds AS (
$sql = "WITH RECURSIVE as_table(sim, original_sim) AS (VALUES {$parameters}), update_olds AS (
UPDATE virtual_order_cards_partition SET sim = as_table.sim, original_sim = as_table.original_sim
FROM as_table WHERE virtual_order_cards_partition.sim = as_table.original_sim
)
@ -398,7 +392,8 @@ class OrderService extends Service
FROM as_table WHERE virtual_order_cards_partition.sim = as_table.sim;
";
DB::statement($sql);
DB::statement($sql);
}
}
}