WIN-2308041133\Administrator 10 ساعت پیش
والد
کامیت
8a6a78381b
1فایلهای تغییر یافته به همراه72 افزوده شده و 22 حذف شده
  1. 72 22
      app/api/controller/Shop.php

+ 72 - 22
app/api/controller/Shop.php

@@ -10,6 +10,7 @@ use app\model\api\StoreCart;
 use app\model\api\PayTrade;
 use app\model\api\UserAddress;
 use app\model\api\StoreProductAttrValue;
+use app\model\api\UserScoreDetail;
 use app\Request;
 use library\services\UtilService;
 use think\facade\Db;
@@ -93,7 +94,7 @@ class Shop extends BaseController
                     'price' => $price,
                     'total_price' => $productMoney,
                 ], 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');
 
+        // 检查用户积分是否足够
+        $userScore = Db::name('user')->where('uid', $request->user['uid'])->value('score') ?? 0;
+        if ($userScore < $payMoney) {
+            return app('json')->fail('积分不足,当前积分:' . $userScore . ',需要:' . $payMoney);
+        }
+
         // 开启事务
         Db::startTrans();
         try {
@@ -113,9 +120,6 @@ class Shop extends BaseController
                 'uid' => $request->user['uid'],
                 'real_name' => $address['real_name'],
                 'user_phone' => $address['phone'],
-//                'province' => $address['province'],
-//                'city' => $address['city'],
-//                'district' => $address['district'],
                 'user_address' => $address['detail'],
                 'total_price' => $totalMoney,
                 'total_num' => $totalNum,
@@ -136,23 +140,41 @@ class Shop extends BaseController
             }
             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();
@@ -247,9 +269,37 @@ class Shop extends BaseController
             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('取消订单失败');
+        }
     }
 
     /**