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

214 lines
6.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Advert;
use App\Models\Card;
use App\Models\Goods;
use App\Models\Mobile;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use RuLong\Order\Models\OrderDetail;
/**
* 提货商城
*/
class PickController extends Controller
{
public $orderid;
public function __construct()
{
view()->share('nav', 2);
view()->share('app_title', '提货商城');
}
public function index(Request $request)
{
$area = $this->getDefault('area');
$this->setSearchValue($request);
$pick_search = session('pick_search');
$number = $pick_search['number'];
$operator = $pick_search['operator'];
$begin = $pick_search['begin'];
$type = $pick_search['type'];
$adverts = Advert::where('channel', 'pick')->orderBy('sort', 'asc')->take(5)->get(); //banner
$lists = Mobile::where('status', 1)
->when($number, function ($q) use ($number) {
$q->where('number', 'like', "%{$number}");
})
->when($operator, function ($q) use ($operator) {
$q->where('operator', $operator);
})
->when($area->sn, function ($q) use ($area) {
$q->where('city_sn', $area->sn);
})
->when($begin, function ($q) use ($begin) {
$q->where('begin', $begin);
})
->when($type, function ($q) use ($type) {
$q->where('type', $type);
})
->inRandomOrder()
->take(6)
->get();
if ($request->isMethod('POST')) {
if ($lists->isNotEmpty()) {
$html = response(view('pick.mobile', compact('lists')))->getContent();
return $this->success($html);
} else {
return $this->error('没有数据了');
}
} else {
view()->share('user', Auth::user());
return view('pick.index', compact('lists', 'adverts', 'area', 'number'));
}
}
public function setSearchValue($request)
{
$pick_search = [
'number' => '',
'operator' => [],
'begin' => [],
'type' => [],
];
foreach ($request->all() as $key => $value) {
$pick_search[$key] = $value;
}
session(['pick_search' => $pick_search]);
}
//更多
public function lists(Request $request)
{
$adverts = Advert::where('channel', 'pick')->orderBy('sort', 'asc')->take(5)->get(); //banner
$area = $this->getDefault('area');
$this->setSearchValue($request);
$pick_search = session('pick_search');
$number = $pick_search['number'];
$operator = $pick_search['operator'];
$begin = $pick_search['begin'];
$type = $pick_search['type'];
$lists = Mobile::where('status', 1)
->when($number, function ($q) use ($number) {
$q->where('number', 'like', "%{$number}");
})
->when($area->sn, function ($q) use ($area) {
$q->where('city_sn', $area->sn);
})
->when($operator, function ($q) use ($operator) {
$q->whereIn('operator', $operator);
})
->when($begin, function ($q) use ($begin) {
$q->whereIn('begin', $begin);
})
->when($type, function ($q) use ($type) {
$q->whereIn('type', $type);
})
->paginate();
if ($request->isMethod('AJAX')) {
$html = response(view('pick.mobile', compact('lists')))->getContent();
return $this->success($html);
} else {
return view('pick.lists', compact('lists', 'adverts', 'number', 'area'));
}
}
//领取手机号
public function receiveMobile(Request $request)
{
$id = $request->mobile_id;
$mobile = Mobile::find($id);
$res = $this->checkCard($request);
if ($res['status'] != 'ERROR') {
$card = $res['card'];
} else {
$url = $res['redirect'] ?? '';
return $this->error($res['message'], $url);
}
try {
DB::transaction(function () use ($mobile, $card) {
$data = new OrderDetail(['goods' => $mobile, 'number' => 1]);
$this->orderid = \Orders::create(Auth::id(), 0, 'PICK', [0 => $data], 0, null, '', null, 0, 0, $card->id);
});
return $this->success('订单创建成功', route('pay.order', $this->orderid));
} catch (\Exception $e) {
return $this->error('订单创建失败' . $e->getmessage());
}
}
//领取商品
public function receiveGoods(Request $request)
{
$params_id = $request->params_id;
$params = Mobile::find($params_id);
$res = $this->checkCard($request);
if ($res['status'] != 'ERROR') {
$card = $res['card'];
} else {
return $this->error($res['message'], $res['redirect']);
}
$data['details'][0][1]['params_id'] = $params_id;
$data['details'][0][1]['number'] = 1;
$data['item']['id'] = 0;
$data['item']['type'] = 'PICK';
$data['item']['card_id'] = $card->id;
return $this->success('领取成功', route('orders.create', $data));
}
//校验提货卡
public function checkCard($request)
{
if (!Auth::user()) {
return $this->error('请登录后进行此操作', route('login', ['callback' => url()->current()]));
}
if (count(array_filter($request->pass)) != 4) {
return $this->error('卡密必须输入完整');
}
$pass = implode('-', $request->pass);
$card = Card::where('pass', $pass)->first();
if (!$card) {
return ['status' => 'ERROR', 'message' => '卡密不正确'];
} elseif ($card->status == 5 || empty($card->user_id)) {
return ['status' => 'ERROR', 'message' => '卡号状态不对'];
}
return ['status' => 'SUCCESS', 'card' => $card];
}
//提货商品详情
public function detail(Goods $good)
{
$params = $good->params()->where('stock', '>', 0)->orderBy('price', 'asc')->get();
$first = $good->params()->orderBy('original', 'asc')->first();
$user = Auth::user();
return view('pick.detail', compact('good', 'params', 'user', 'first'));
}
public function search()
{
$pick_search = session('pick_search');
return view('pick.search', compact('pick_search'));
}
}