Browse Source

增加OrderController

dev
李可松 4 years ago
parent
commit
107cb7b4fe
  1. 117
      app/Http/Controllers/Api/OrderController.php

117
app/Http/Controllers/Api/OrderController.php

@ -0,0 +1,117 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\AgentProduct;
use App\Models\Order;
use Illuminate\Http\Request;
/**
* 订单
* Class OrderController
* @package App\Http\Controllers\Api
*/
class OrderController extends Controller
{
//订单列表
public function index(Request $request)
{
$formData = $request->only(['page', 'status']);
$request->validate([
'page' => 'regex:/^\d+$/',
'status' => 'integer'
], [
'page.regex' => '页码错误',
'status.integer' => '未指定订单状态'
]);
if (array_key_exists('status', $formData) && $formData['status'] !== null) {
$where['status'] = $formData['status'];
}
$where['user_id'] = $this->user_id;
$list = Order::where($where)
->with(['product' => fn($query) => $query->select('id', 'title', 'pictures')])
->select('id', 'product_id', 'price', 'num', 'created_at')
->orderBy('id', 'DESC')
->simplePaginate(15);
return $this->success($list);
}
public function create(Request $request)
{
$formData = $request->only(['id', 'name', 'mobile', 'pay_type', 'num']);
$formData = array_map(fn($v) => trim($v), $formData); //过滤,删除首尾空
//表单验证
$request->validate([
'id' => ['required', 'regex:/^\d+$/'],
'name' => ['required', 'between:2,20'],
'mobile' => ['required', 'regex:/^1[3-9]\d{9}$/'],
'pay_type' => ['required', 'in:0,1,2'],
'num' => ['required', 'min:1'],
], [
'id.required' => '未指定产品ID',
'name.required' => '请输入联系人姓名',
'mobile.required' => '请输入联系手机号',
'id.regex' => '产品ID错误',
'name.between' => '联系人姓名在2~20字符之间',
'mobile.regex' => '请输入11位手机号',
'pay_type.required' => '请选择支付方式',
'pay_type.in' => '不存在此支付方式',
'num.required' => '请输入购买数量',
'num.min' => '购买数量输入错误',
]);
$product = AgentProduct::where('id', $formData['id'])->with('product')->first();
if (!$product) {
$this->error('产品不存在');
}
$price = $product->price; //TODO 1、成交价格还要扣除优惠券;2、产品表加库存;3、生成资金流水;4、开启事务;
Order::create([
'user_id' => $this->user_id,
'order_no' => $this->getOrderNo(),
'num' => $formData['num'],
'price' => $price,
'name' => $formData['name'],
'mobile' => $formData['mobile'],
'title' => $product->product->title,
'agent_product_id' => $product->id,
'product_id' => $product->product_id,
'status' => 0,
'pay_type' => $formData['pay_type'],
]);
return $this->success();
}
//获取应付金额
public function getPrice(Request $request)
{
$id = $request->input('id');
if (!$id || !ctype_digit($id)) {
return $this->error('未指定ID');
}
$num = (float)$request->input('num');
if (!$num || $num < 1) {
return $this->error('未指定产品数量');
}
return $this->success(['price' => $this->calc($id, $num)]);
}
//计算价格
private function calc($agent_id, $num)
{
return 2888.99; // TODO 此处需要详细计算,并扣除优惠价等之后的价格
}
// 生成订单号
private function getOrderNo()
{
list($micro, $sec) = explode(' ', microtime());
return date('YmdHis', $sec) . str_pad(floor($micro * 1000000), 6, 0, STR_PAD_LEFT) . mt_rand(100, 999);
}
}
Loading…
Cancel
Save