216 lines
7.5 KiB
PHP
216 lines
7.5 KiB
PHP
<?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());
|
||
}
|
||
}
|
||
|
||
}
|