替卡方式

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