1
0
Files
lkafu/app/Http/Controllers/OrderController.php
2020-08-06 14:45:56 +08:00

216 lines
7.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers;
use App\Models\Cart;
use App\Models\GoodsParams;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use RuLong\Area\Models\UserAddress;
use RuLong\Order\Models\Order;
use RuLong\Order\Models\OrderDetail;
class OrderController extends Controller
{
public $orderid;
public function __construct(Request $request)
{
view()->share('nav', 4);
$this->middleware('auth');
}
public function index()
{
$orders = Order::where('user_id', Auth::id())
->where('state', '<>', Order::ORDER_CLOSED)
->orderBy('id', 'desc')
->get();
return view('orders.index', compact('orders'));
}
public function unpay()
{
$orders = Order::Unpaid()
->where('user_id', Auth::id())
->orderBy('id', 'desc')
->get();
return view('orders.index', compact('orders'));
}
public function paid()
{
$orders = Order::UnDeliver()
->where('user_id', Auth::id())
->orderBy('id', 'desc')
->get();
return view('orders.index', compact('orders'));
}
public function delivered()
{
$orders = Order::Delivered()
->where('user_id', Auth::id())
->orderBy('id', 'desc')
->get();
return view('orders.index', compact('orders'));
}
public function signed()
{
$orders = Order::Signed()
->where('user_id', Auth::id())
->orderBy('id', 'desc')
->get();
return view('orders.index', compact('orders'));
}
public function show($orderid)
{
$order = Order::where('orderid', $orderid)->firstOrFail();
return view('orders.show', compact('order'));
}
//确认订单
public function create(Request $request)
{
$user = Auth::user();
$address_id = $request->get('address', '');
$address = $address_id ? UserAddress::find($address_id) : UserAddress::where('user_id', Auth::id())->orderBy('is_default', 'desc')->first() ?? '';
if (!($request->has('details'))) {
$items = Session::get('items_store');
} else {
$items = $request->details;
Session::put(['items_store' => $items]);
}
//为存储到order表中区分普通商品or套餐商品item_id>0套餐商品
if (!($request->has('item'))) {
$item = Session::get('item');
} else {
$item = $request->item;
Session::put(['item' => $item]);
}
if (empty($items)) {
return redirect()->route('user.index');
}
$sellers_score = 0;
$sellers_total = 0;
$sellers_freight = 0;
$sellers_count = 0;
//按照商户分单,一个商户一个订单,一个订单可多个商品
foreach ($items as $key => $seller_item) {
$detail[$key]['seller_id'] = $key;
$detail[$key]['amount'] = 0;
$detail[$key]['freight'] = 0;
$detail[$key]['heavy'] = 0;
$detail[$key]['score'] = 0;
foreach ($seller_item as $kk => $value) {
$params = GoodsParams::find($value['params_id']);
if ($params) {
if ($item['type'] == 'MEMBER') {
$price = $user->identity_id > 0 ? $params->price : $params->original;
} else {
$price = $params->price;
}
$detail[$key]['items'][] = [
'params_id' => $params->id,
'params_cover' => $params->storage,
'params_title' => $params->getTitle(),
'params_price' => $price,
'params_score' => $params->score,
'number' => $value['number'],
'cart_id' => isset($value['cart_id']) ? $value['cart_id'] : 0, //是否从购物车下单的商品
];
}
$detail[$key]['amount'] += $value['number'] * $price;
$detail[$key]['score'] += $value['number'] * $params->score;
}
$sellers_score += $detail[$key]['score'];
$sellers_total += $detail[$key]['amount'];
$detail[$key]['freight'] = 0; //包邮
$detail[$key]['item']['id'] = $item['id']; //0普通商品订单一单支持多商品
$detail[$key]['item']['type'] = $item['type']; //0普通商品订单一单支持多商品
$card_id = $item['card_id'] ?? 0;
$sellers_total += $detail[$key]['freight'];
$sellers_freight += $detail[$key]['freight'];
$sellers_count += 1;
}
return view('orders.create', compact('detail', 'address', 'sellers_total', 'sellers_score', 'sellers_freight', 'sellers_count', 'card_id'));
}
public function store(Request $request)
{
$user = Auth::user();
try {
DB::transaction(function () use ($request, $user) {
$address = UserAddress::find($request->address_id);
$card_id = $request->card_id ?? 0;
foreach ($request->details as $kk => $seller_detail) {
$items[$kk] = array();
$score[$kk] = 0;
$score_order[$kk] = 0;
foreach ($seller_detail['items'] as $key => $value) {
if ($value['cart_id'] != 0 && $cart = Cart::find($value['cart_id'])) {
$cart->delete();
}
$params = GoodsParams::find($value['params_id']);
if ($seller_detail['type'] == 'MEMBER' && $user->identity_id < 1) {
$params->price = $params->original;
}
array_push($items[$kk], new OrderDetail(['goods' => $params, 'number' => $value['number']]));
}
$express_type[$kk] = isset($seller_detail['express_type']) ? $seller_detail['express_type'] : 1;
$seller_detail['freight'] = 0;
$this->orderid = \Orders::create(Auth::id(), $seller_detail['seller_id'], $seller_detail['type'], $items[$kk], $express_type[$kk], $address, $request->remark, null, $score_order[$kk], $seller_detail['freight'], $card_id);
}
});
Session::forget('items_store');
Session::forget('item');
return $this->success('订单创建成功', route('pay.order', $this->orderid));
} catch (\Exception $e) {
return $this->error('订单创建失败' . $e->getmessage());
}
}
public function sign($orderid)
{
$order = Order::where('orderid', $orderid)->firstOrFail();
try {
$order->signin();
return $this->success('签收成功', route('orders.signed'));
} catch (\Exception $e) {
return $this->error('签收失败' . $e->getmessage());
}
}
public function delete($orderid)
{
$order = Order::where('orderid', $orderid)->firstOrFail();
try {
$order->close();
return $this->success('取消订单成功');
} catch (\Exception $e) {
return $this->error('取消订单失败' . $e->getmessage());
}
}
}