rabin 6 giorni fa
parent
commit
780bd54452

+ 11 - 7
src/dai/seller/app/Lib/Info.php

@@ -4,18 +4,22 @@ class Info
 {
     # 余额扣款
     public function dec_commit(){}
-    public function dec($id, $cash, $version = 0)
+    public function dec($id, $cash)
     {
-        $state = Dever::db('seller/info')->update($id, array('cash' => array('-', $cash)), $version);
-        return $state;
+        $sql = 'UPDATE {table} SET cash = cash - :cash WHERE id = :id AND (credit + cash) >= :cash';
+        $bind = [':cash' => $cash, ':id' => $id];
+        $statement = Dever::db('seller/info')->query($sql, $bind, ['method' => 'update']);
+        return $statement->rowCount() > 0;
     }
 
     # 余额加款
     public function inc_commit(){}
-    public function inc($id, $cash, $version = 0)
+    public function inc($id, $cash)
     {
-        $state = Dever::db('seller/info')->update($id, array('cash' => array('+', $cash)), $version);
-        return $state;
+        $sql = 'UPDATE {table} SET cash = cash + :cash WHERE id = :id';
+        $bind = [':cash' => $cash, ':id' => $id];
+        $statement = Dever::db('seller/info')->query($sql, $bind, ['method' => 'update']);
+        return $statement->rowCount() > 0;
     }
 
     # 增加日志
@@ -40,4 +44,4 @@ class Info
     {
 
     }
-}
+}

+ 15 - 48
src/dai/seller/app/Lib/Order.php

@@ -61,58 +61,25 @@ class Order
         if (!$value || $value <= 0) {
             Dever::error('面值无效');
         }
-        $lockKey = 'seller_cash_lock_' . $seller_id;
-        $lockToken = uniqid('cash_', true);
-        $lockAcquired = false;
-        for ($i = 0; $i < 5; $i++) {
-            if (Redis::lock($lockKey, $lockToken, 5)) {
-                $lockAcquired = true;
-                break;
-            }
-            usleep(50000);
-        }
-        if (!$lockAcquired) {
-            Dever::error('扣费繁忙,请稍后再试');
+        # 查询折扣 扣费
+        $seller_goods = Dever::db('seller/goods')->find(array('seller_id' => $seller_id, 'goods_id' => $goods_id, 'sku_id' => $sku_id));
+        if (!$seller_goods) {
+            $seller_goods = Dever::db('seller/goods')->find(array('seller_id' => $seller_id, 'goods_id' => $goods_id, 'sku_id' => -1));
         }
-        try {
-            # 查询折扣 扣费
-            $seller_goods = Dever::db('seller/goods')->find(array('seller_id' => $seller_id, 'goods_id' => $goods_id, 'sku_id' => $sku_id));
-            if (!$seller_goods) {
-                $seller_goods = Dever::db('seller/goods')->find(array('seller_id' => $seller_id, 'goods_id' => $goods_id, 'sku_id' => -1));
-            }
 
-            $info = Dever::db('seller/info')->find($seller_id, [], true);
-            if ($seller_goods && $seller_goods['discount']) {
-                $info['discount'] = $seller_goods['discount'];
-            }
-            if (!$info['discount']) {
-                $info['discount'] = 1;
-            }
-            $cash = round($value * $info['discount'], 2) * $num;
+        $info = Dever::db('seller/info')->find($seller_id);
+        if ($seller_goods && $seller_goods['discount']) {
+            $info['discount'] = $seller_goods['discount'];
+        }
+        if (!$info['discount']) {
+            $info['discount'] = 1;
+        }
+        $cash = round($value * $info['discount'], 2) * $num;
 
-            # 查询余额是否充足
-            $info['yue'] = $info['credit'] + $info['cash'];
-            if ($info['yue'] < $cash) {
-                Dever::error('余额不足');
-            }
-            $retry = 0;
-            while ($retry < 3) {
-                $state = Dever::load(Info::class)->dec($info['id'], $cash, $info['version']);
-                if ($state) {
-                    return $cash;
-                }
-                $retry++;
-                usleep(50000);
-                $info = Dever::db('seller/info')->find($seller_id, [], true);
-                $info['yue'] = $info['credit'] + $info['cash'];
-                if ($info['yue'] < $cash) {
-                    break;
-                }
-            }
+        if (!Dever::load(Info::class)->dec($info['id'], $cash)) {
             Dever::error('余额不足');
-        } finally {
-            Redis::unlock($lockKey, $lockToken);
         }
+        return $cash;
     }
 
     # 向渠道发起请求
@@ -418,7 +385,7 @@ class Order
             }
             
             # 失败,余额加回来
-            Dever::load(Info::class)->inc($info['seller_id'], $info['price'], 1);
+            Dever::load(Info::class)->inc($info['seller_id'], $info['price']);
         }
     }
 

+ 6 - 4
src/dai/seller/manage/Lib/Data.php

@@ -196,7 +196,7 @@ class Data {
         foreach ($id as $k => $v) {
             $info = Dever::db('seller/order_history')->find($v);
             if ($info['status'] == 11) {
-                Dever::load(\Seller\Lib\Order::class)->inc($info['seller_id'], $info['price'], true);
+                Dever::load(\Seller\Lib\Info::class)->inc($info['seller_id'], $info['price']);
             }
         }
     }
@@ -207,8 +207,10 @@ class Data {
         if ($data['type'] == 1) {
             Dever::db('seller/info')->update($data['seller_id'], array('cash' => array('+', $data['cash']), 'p_cash' => array('+', $data['cash'])));
         } elseif ($data['type'] == 2) {
-            $data['cash'] = -1*$data['cash'];
-            Dever::load(\Seller\Lib\Info::class)->dec($data['seller_id'], $data['cash'], true);
+            if (!Dever::load(\Seller\Lib\Info::class)->dec($data['seller_id'], $data['cash'])) {
+                Dever::error('余额不足');
+            }
+            $data['cash'] = -1 * $data['cash'];
         }
         return $data;
     }
@@ -611,4 +613,4 @@ class Data {
         $result .= '面值:' . $cash . ' 销售价:' . $price . ' 成本价:' . $buy_price;
         return $result;
     }
-}
+}