OrderController.php
3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
namespace App\Http\Controllers\V1;
use App\Http\Controllers\Controller;
use App\Models\MembershipGood;
use App\Models\Order;
use App\Models\OrderGood;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Jiannei\Response\Laravel\Support\Facades\Response;
class OrderController extends Controller
{
public function index(Request $request)
{
}
public function store(Request $request)
{
$data = $request->all();
$validator = Validator::make($data,[
'goods_id' => 'required|integer',
]);
if ($validator->fails()) return Response::fail('缺少参数',500,$validator->errors());
$user_id = Auth::user()->getAuthIdentifier();
$order = $this->build($user_id, $data['goods_id'], $this->getClientTerminal());
return Response::success($order);
}
public function show($id)
{
}
/**
* 创建订单
* @param $user_id
* @param $member_id
* @param $source
* @param $number = 1
* @return string $order_sn
*/
public function build($user_id, $member_id, $source, $number = 1)
{
try{
return DB::transaction(function ()use ($user_id, $member_id, $source, $number){
// 获取商品信息
$membership_good = MembershipGood::query()->where('id',$member_id)->first();
$membership = $membership_good->membership()->first();
// 实付金额 = 商品金额
$pay_amount = $membership_good->price * $number;
// 创建订单
$order = new Order();
$order_sn = $order::get_sn('osn');
$order->order_sn = $order_sn;
$order->user_id = $user_id;
$order->pay_amount = $pay_amount;
$order->description = '一言会员' . $membership_good->limit_days . $membership_good->limit_unit;
$order->goods_amount = $membership_good->price;
$order->status = Order::UNPAID;
$order->source = $source;
$order->save();
$order_good = new OrderGood();
$order_good->order_sn = $order_sn;
$order_good->goods_id = $member_id;
$order_good->goods_type = OrderGood::MemberShip;
$order_good->goods_name = $membership_good->limit_days . $membership_good->limit_unit;
$order_good->goods_image = $membership->getSingleImage();
$order_good->goods_price = $membership_good->price;
$order_good->goods_number = $number;
$order_good->save();
$order->goods = $order_good;
// todo 超时处理,建议给Job处理
// if ($pay_amount == 0) { //0元购就不执行回调了
// $this->freePay($order);
// }
return $order;
});
}catch (\Exception $exception){
return Response::fail('', 500, $exception->getMessage());
}
}
public function freePay($order)
{
$order = Order::query()->find($order->id);
if ($order->status < Order::PAID){
$order->status = Order::PAID;
$order->pay_type = '';
$order->pay_time = Carbon::now();
if ($order->save()){
// 执行一些本来属于回调的逻辑
return true;
}
}
return false;
}
}