|
@@ -10,6 +10,7 @@ use app\model\api\StoreCart;
|
|
|
use app\model\api\PayTrade;
|
|
use app\model\api\PayTrade;
|
|
|
use app\model\api\UserAddress;
|
|
use app\model\api\UserAddress;
|
|
|
use app\model\api\StoreProductAttrValue;
|
|
use app\model\api\StoreProductAttrValue;
|
|
|
|
|
+use app\model\api\UserScoreDetail;
|
|
|
use app\Request;
|
|
use app\Request;
|
|
|
use library\services\UtilService;
|
|
use library\services\UtilService;
|
|
|
use think\facade\Db;
|
|
use think\facade\Db;
|
|
@@ -93,7 +94,7 @@ class Shop extends BaseController
|
|
|
'price' => $price,
|
|
'price' => $price,
|
|
|
'total_price' => $productMoney,
|
|
'total_price' => $productMoney,
|
|
|
], JSON_UNESCAPED_UNICODE),
|
|
], JSON_UNESCAPED_UNICODE),
|
|
|
- 'unique' => $cart['product_attr_unique'] ?? '',
|
|
|
|
|
|
|
+ 'unique' => $cart['product_attr_unique'] ?: ('cart_' . $cart['id']),
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -104,6 +105,12 @@ class Shop extends BaseController
|
|
|
// 生成订单号
|
|
// 生成订单号
|
|
|
$orderId = makeOrderId($request->user['uid'], 'SO');
|
|
$orderId = makeOrderId($request->user['uid'], 'SO');
|
|
|
|
|
|
|
|
|
|
+ // 检查用户积分是否足够
|
|
|
|
|
+ $userScore = Db::name('user')->where('uid', $request->user['uid'])->value('score') ?? 0;
|
|
|
|
|
+ if ($userScore < $payMoney) {
|
|
|
|
|
+ return app('json')->fail('积分不足,当前积分:' . $userScore . ',需要:' . $payMoney);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 开启事务
|
|
// 开启事务
|
|
|
Db::startTrans();
|
|
Db::startTrans();
|
|
|
try {
|
|
try {
|
|
@@ -113,9 +120,6 @@ class Shop extends BaseController
|
|
|
'uid' => $request->user['uid'],
|
|
'uid' => $request->user['uid'],
|
|
|
'real_name' => $address['real_name'],
|
|
'real_name' => $address['real_name'],
|
|
|
'user_phone' => $address['phone'],
|
|
'user_phone' => $address['phone'],
|
|
|
-// 'province' => $address['province'],
|
|
|
|
|
-// 'city' => $address['city'],
|
|
|
|
|
-// 'district' => $address['district'],
|
|
|
|
|
'user_address' => $address['detail'],
|
|
'user_address' => $address['detail'],
|
|
|
'total_price' => $totalMoney,
|
|
'total_price' => $totalMoney,
|
|
|
'total_num' => $totalNum,
|
|
'total_num' => $totalNum,
|
|
@@ -136,23 +140,41 @@ class Shop extends BaseController
|
|
|
}
|
|
}
|
|
|
Db::name('store_order_cart_info')->insertAll($cartInfo);
|
|
Db::name('store_order_cart_info')->insertAll($cartInfo);
|
|
|
|
|
|
|
|
|
|
+ // 扣除用户积分
|
|
|
|
|
+ $scoreDetail = new UserScoreDetail();
|
|
|
|
|
+ $scoreResult = $scoreDetail->payScore(
|
|
|
|
|
+ $request->user['uid'],
|
|
|
|
|
+ $payMoney,
|
|
|
|
|
+ 'outcome_score',
|
|
|
|
|
+ '商城订单:' . $orderId,
|
|
|
|
|
+ ['o_id' => $orderIdDb]
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ if (!$scoreResult) {
|
|
|
|
|
+ Db::rollback();
|
|
|
|
|
+ return app('json')->fail('积分扣除失败');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 创建支付流水
|
|
// 创建支付流水
|
|
|
-// $payTrade = new PayTrade();
|
|
|
|
|
-// $payNo = $payTrade->credentials(
|
|
|
|
|
-// 'score',
|
|
|
|
|
-// $request->user['uid'],
|
|
|
|
|
-// 'shop_order',
|
|
|
|
|
-// $payMoney,
|
|
|
|
|
-// '商城订单支付',
|
|
|
|
|
-// $orderId,
|
|
|
|
|
-// ['order_id' => $orderId],
|
|
|
|
|
-// 0
|
|
|
|
|
-// );
|
|
|
|
|
-//
|
|
|
|
|
-// // 更新支付流水的o_id
|
|
|
|
|
-// if ($payNo) {
|
|
|
|
|
-// Db::name('pay_trade')->where('pay_no', $payNo)->update(['o_id' => $orderIdDb]);
|
|
|
|
|
-// }
|
|
|
|
|
|
|
+ $payTrade = new PayTrade();
|
|
|
|
|
+ $payTrade->credentials(
|
|
|
|
|
+ 'score',
|
|
|
|
|
+ $request->user['uid'],
|
|
|
|
|
+ 'shop_order',
|
|
|
|
|
+ $payMoney,
|
|
|
|
|
+ '商城订单积分支付',
|
|
|
|
|
+ $orderId,
|
|
|
|
|
+ ['order_id' => $orderId],
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 'shop_score',
|
|
|
|
|
+ $orderIdDb
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // 更新订单为已支付状态(积分支付直接完成)
|
|
|
|
|
+ Db::name('store_order')->where('id', $orderIdDb)->update([
|
|
|
|
|
+ 'paid' => 1,
|
|
|
|
|
+ 'pay_time' => time()
|
|
|
|
|
+ ]);
|
|
|
|
|
|
|
|
// 清除购物车
|
|
// 清除购物车
|
|
|
Db::name('store_cart')->whereIn('id', $cartIds)->delete();
|
|
Db::name('store_cart')->whereIn('id', $cartIds)->delete();
|
|
@@ -247,9 +269,37 @@ class Shop extends BaseController
|
|
|
return app('json')->fail('订单不存在或已取消');
|
|
return app('json')->fail('订单不存在或已取消');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- Db::name('store_order')->where('id', $order['id'])->update(['status' => -1]);
|
|
|
|
|
|
|
+ Db::startTrans();
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 退还用户积分(如果是积分支付且已支付)
|
|
|
|
|
+ if ($order['paid'] == 1) {
|
|
|
|
|
+ $userScore = new UserScoreDetail();
|
|
|
|
|
+ $result = $userScore->incomeScore(
|
|
|
|
|
+ $request->user['uid'],
|
|
|
|
|
+ $order['pay_price'],
|
|
|
|
|
+ $order['order_id'],
|
|
|
|
|
+ 'score_refund',
|
|
|
|
|
+ [],
|
|
|
|
|
+ $order['id'],
|
|
|
|
|
+ '积分退款',
|
|
|
|
|
+ '商城订单取消退还积分:' . $order['order_id']
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ if (!$result) {
|
|
|
|
|
+ Db::rollback();
|
|
|
|
|
+ return app('json')->fail('积分退还失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Db::name('store_order')->where('id', $order['id'])->update(['status' => -1]);
|
|
|
|
|
+ Db::commit();
|
|
|
|
|
|
|
|
- return app('json')->success('订单已取消');
|
|
|
|
|
|
|
+ return app('json')->success('订单已取消,积分已退还');
|
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
|
+ Db::rollback();
|
|
|
|
|
+ @file_put_contents('quanju.txt', date('Y-m-d H:i:s') . ' [cancelOrder Error] ' . $e->getMessage() . "\r\n", 8);
|
|
|
|
|
+ return app('json')->fail('取消订单失败');
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|