Kirin 3 роки тому
батько
коміт
d6e9cdb323

+ 5 - 5
app/admin/controller/finance/UserExtract.php

@@ -144,11 +144,11 @@ class UserExtract extends AuthController
         if ($extract->status == 1) return JsonService::fail('您已提现,请勿重复提现!');
         if ($extract->status == -1) return JsonService::fail('您的提现申请已被拒绝!');
         $res = UserExtractModel::changeSuccess($id);
-        if ($extract['extract_price'] > $extract['real_get']) {
-            $num = $extract['extract_price'] - $extract['real_get'];
-            $res = $res && UserBill::income('提现转换', $extract['uid'], 'integral', 'extract_get', $num, $extract['id'], \app\admin\model\user\User::where('uid', $extract['uid'])->value('integral') + $num, '提现申请通过,其中部分佣金转换为响亮积分' . $num);
-            $res = $res && \app\admin\model\user\User::where('uid', $extract['uid'])->inc('integral', $num)->update();
-        }
+//        if ($extract['extract_price'] > $extract['real_get']) {
+//            $num = $extract['extract_price'] - $extract['real_get'];
+//            $res = $res && UserBill::income('提现转换', $extract['uid'], 'integral', 'extract_get', $num, $extract['id'], \app\admin\model\user\User::where('uid', $extract['uid'])->value('integral') + $num, '提现申请通过,其中部分佣金转换为响亮积分' . $num);
+//            $res = $res && \app\admin\model\user\User::where('uid', $extract['uid'])->inc('integral', $num)->update();
+//        }
         if ($res) {
             UserExtractModel::commitTrans();
             return JsonService::successful('操作成功!');

+ 4 - 3
app/admin/model/user/UserExtract.php

@@ -56,6 +56,7 @@ class UserExtract extends BaseModel
         $data['priced'] = floatval(self::where('status', 1)->sum('extract_price'));
         //未提现金额
         $data['brokerage_not'] = bcsub(bcsub($data['brokerage_count'], $data['priced'], 2), $data['price'], 2);
+        $data['cash'] = \app\models\user\User::sum('cash');
         return compact('data');
     }
 
@@ -86,12 +87,12 @@ class UserExtract extends BaseModel
         $fail_time = time();
         $data = self::get($id);
         $extract_number = $data['extract_price'];
-        $mark = '提现失败,退回金' . $extract_number . '元';
+        $mark = '提现失败,退回金' . $extract_number . '元';
         $uid = $data['uid'];
         $status = -1;
         $User = User::where('uid', $uid)->find()->toArray();
-        UserBill::income('提现失败', $uid, 'now_money', 'extract', $extract_number, $id, bcadd($User['now_money'], $extract_number, 2), $mark);
-        User::bcInc($uid, 'brokerage_price', $extract_number, 'uid');
+        UserBill::income('提现失败', $uid, 'cash', 'extract', $extract_number, $id, bcadd($User['cash'], $extract_number, 2), $mark);
+        User::bcInc($uid, 'cash', $extract_number, 'uid');
         $extract_type = '未知方式';
         switch ($data['extract_type']) {
             case 'alipay':

+ 22 - 0
app/api/controller/user/UserController.php

@@ -661,4 +661,26 @@ class UserController
             return app('json')->fail('支付失败:' . User::getErrorInfo('支付错误'));
         }
     }
+
+    public function tradeCash(Request $request)
+    {
+        $user = $request->user();
+        $uid = $user['uid'];
+        list($num, $to_user_account) = UtilService::postMore(
+            [
+                ['num', 0],
+                ['to_user_account', ''],
+            ], $request, true);
+        if (!$num || !$to_user_account) {
+            return app('json')->fail('参数不足');
+        }
+        $to_uid = User::where('account', $to_user_account)->value('uid');
+        if (!$to_uid) return app('json')->fail('目标用户不存在');
+        $res = User::tradeCash($uid, $to_uid, $num);
+        if ($res) {
+            return app('json')->success('支付成功');
+        } else {
+            return app('json')->fail('支付失败:' . User::getErrorInfo('支付错误'));
+        }
+    }
 }

+ 31 - 10
app/api/controller/user/UserExtractController.php

@@ -57,22 +57,16 @@ class UserExtractController
      * @param Request $request
      * @return mixed
      */
-    public function cash(Request $request)
+    public function exchangeBrokerage(Request $request)
     {
         $extractInfo = UtilService::postMore([
-            ['alipay_code', ''],
-            ['extract_type', ''],
             ['money', 0],
-            ['name', ''],
-            ['bankname', ''],
-            ['cardnum', ''],
-            ['weixin', ''],
         ], $request);
         if (time() - CacheService::get('UserExtract_' . $request->uid(), 0) < 10) return app('json')->fail('请勿连续多次提交');
         else CacheService::set('UserExtract_' . $request->uid(), time());
-        if (!preg_match('/^(([1-9]\d*)|0)(\.\d{1-2})?$/', $extractInfo['money'])) return app('json')->fail('提现金额输入有误');
+        if (!preg_match('/^(([1-9]\d*)|0)(\.\d{1-2})?$/', $extractInfo['money'])) return app('json')->fail('转换金额输入有误');
         $user = $request->user();
-        $broken_time = intval(sys_config('extract_time'));
+        $broken_time = intval(sys_config('extract_time', 0, true));
         $search_time = time() - 86400 * $broken_time;
         //可提现佣金
         //返佣 +
@@ -93,7 +87,34 @@ class UserExtractController
         $data['brokerage_price'] = $user['brokerage_price'];
         //可提现佣金
         $commissionCount = $data['brokerage_price'] - $data['broken_commission'];
-        if ($extractInfo['money'] > $commissionCount) return app('json')->fail('可提现佣金不足');
+        if ($extractInfo['money'] > $commissionCount) return app('json')->fail('可转换佣金不足');
+        if (UserExtract::userExchange($request->user(), $extractInfo))
+            return app('json')->successful('转换成功!');
+        else
+            return app('json')->fail(UserExtract::getErrorInfo('转换失败'));
+    }
+
+    /**
+     * 提现申请
+     * @param Request $request
+     * @return mixed
+     */
+    public function cash(Request $request)
+    {
+        $extractInfo = UtilService::postMore([
+            ['alipay_code', ''],
+            ['extract_type', ''],
+            ['money', 0],
+            ['name', ''],
+            ['bankname', ''],
+            ['cardnum', ''],
+            ['weixin', ''],
+        ], $request);
+        if (time() - CacheService::get('UserExtract_' . $request->uid(), 0) < 10) return app('json')->fail('请勿连续多次提交');
+        else CacheService::set('UserExtract_' . $request->uid(), time());
+        if (!preg_match('/^(([1-9]\d*)|0)(\.\d{1-2})?$/', $extractInfo['money'])) return app('json')->fail('提现金额输入有误');
+        $user = $request->user();
+        if ($extractInfo['money'] > $user['cash']) return app('json')->fail('可提现现金不足');
         if (!$extractInfo['cardnum'] == '')
             if (!preg_match('/^([1-9]{1})(\d{14}|\d{18})$/', $extractInfo['cardnum']))
                 return app('json')->fail('银行卡号输入有误');

+ 25 - 0
app/models/user/User.php

@@ -816,4 +816,29 @@ class User extends BaseModel
             return self::setErrorInfo($e->getMessage());
         }
     }
+
+    public static function tradeCash($uid, $to_uid, $num)
+    {
+        if ($uid == $to_uid) return self::setErrorInfo('不可以转账给自己');
+        $user = self::get($uid);
+        $to_user = self::get($to_uid);
+        if ($user['cash'] < $num) return self::setErrorInfo('现金不足');
+        BaseModel::beginTrans();
+        try {
+            $res1 = self::bcDec($uid, 'cash', $num, 'uid')
+                && UserBill::expend('现金转出', $uid, 'cash', 'trade_out_cash', $num, 0, $user['cash'] - $num, '现金转出' . $num);
+            $res2 = self::bcInc($to_uid, 'cash', $num, 'uid')
+                && UserBill::income('现金转入', $to_uid, 'cash', 'trade_in_cash', $num, 0, $to_user['cash'] + $num, '现金转入' . $num);
+            if ($res1 && $res2) {
+                BaseModel::commitTrans();
+                return true;
+            } else {
+                BaseModel::rollbackTrans();
+                return self::setErrorInfo('转账失败');
+            }
+        } catch (\Exception $e) {
+            BaseModel::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
+        }
+    }
 }

+ 49 - 5
app/models/user/UserExtract.php

@@ -61,13 +61,13 @@ class UserExtract extends BaseModel
         if (!in_array($data['extract_type'], self::$extractType))
             return self::setErrorInfo('提现方式不存在');
         $userInfo = User::get($userInfo['uid']);
-        $extractPrice = $userInfo['brokerage_price'];
+        $extractPrice = $userInfo['cash'];
         if ($extractPrice < 0) return self::setErrorInfo('提现佣金不足' . $data['money']);
         if ($data['money'] > $extractPrice) return self::setErrorInfo('提现佣金不足' . $data['money']);
         if ($data['money'] <= 0) return self::setErrorInfo('提现佣金大于0');
-        $balance = bcsub($userInfo['brokerage_price'], $data['money'], 2);
+        $balance = bcsub($userInfo['cash'], $data['money'], 2);
         if ($balance < 0) $balance = 0;
-        $real_get_ratio = sys_config('extract_ratio', 100);//实际到账率
+        $real_get_ratio = sys_config('extract_ratio', 100, true);//实际到账率
         $insertData = [
             'uid' => $userInfo['uid'],
             'extract_type' => $data['extract_type'],
@@ -101,8 +101,8 @@ class UserExtract extends BaseModel
         try {
             $res1 = self::create($insertData);
             if (!$res1) return self::setErrorInfo('提现失败');
-            $res2 = User::edit(['brokerage_price' => $balance], $userInfo['uid'], 'uid');
-            $res3 = UserBill::expend('余额提现', $userInfo['uid'], 'now_money', 'extract', $data['money'], $res1['id'], $balance, $mark);
+            $res2 = User::edit(['cash' => $balance], $userInfo['uid'], 'uid');
+            $res3 = UserBill::expend('现金提现', $userInfo['uid'], 'cash', 'extract', $data['money'], $res1['id'], $balance, $mark);
             $res = $res2 && $res3;
             if ($res) {
                 self::commitTrans();
@@ -120,6 +120,50 @@ class UserExtract extends BaseModel
         }
     }
 
+    /**
+     * 用户自主提现记录提现记录,后台执行审核
+     * @param array $userInfo 用户个人信息
+     * @param array $data 提现详细信息
+     * @return bool
+     */
+    public static function userExchange($userInfo, $data)
+    {
+        $userInfo = User::get($userInfo['uid']);
+        $extractPrice = $userInfo['brokerage_price'];
+        if ($extractPrice < 0) return self::setErrorInfo('转换佣金不足' . $data['money']);
+        if ($data['money'] > $extractPrice) return self::setErrorInfo('转换佣金不足' . $data['money']);
+        if ($data['money'] <= 0) return self::setErrorInfo('转换佣金大于0');
+        $balance = bcsub($userInfo['brokerage_price'], $data['money'], 2);
+        if ($balance < 0) $balance = 0;
+        $real_get_ratio = sys_config('exchange_ratio', 100, true);//实际到账率
+        $get = bcmul(bcdiv($real_get_ratio, 100, 4), $data['money'], 2);
+        self::beginTrans();
+        try {
+            $res = true;
+
+            $res2 = User::edit(['brokerage_price' => $balance], $userInfo['uid'], 'uid');
+            $res2 = $res2 && UserBill::expend('佣金转现金', $userInfo['uid'], 'now_money', 'brokerage', $data['money'], 0, $balance, '佣金转换现金');
+
+            $res3 = User::edit(['cash' => $userInfo['cash'] + (float)$get], $userInfo['uid'], 'uid');
+            $res3 = $res3 && UserBill::income('现金提现', $userInfo['uid'], 'cash', 'brokerage_exchange', $get, 0, $userInfo['cash'] + (float)$get, '佣金转换现金,实际转换' . $get);
+
+            if ($data['money'] > $get) {
+                $num = $data['money'] - $get;
+                $res = $res && UserBill::income('提现转换', $userInfo['uid'], 'integral', 'extract_get', $num, 0, $userInfo['integral'] + $num, '佣金转换现金,其中部分佣金转换为响亮积分' . $num);
+                $res = $res && User::where('uid', $userInfo['uid'])->inc('integral', $num)->update();
+            }
+
+            $res = $res && $res2 && $res3;
+            if ($res) {
+                self::commitTrans();
+                return true;
+            } else return self::setErrorInfo('转换失败!');
+        } catch (\Exception $e) {
+            self::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
+        }
+    }
+
     /**
      * 获得用户最后一次提现信息
      * @param $openid

+ 3 - 1
route/api/route.php

@@ -58,7 +58,8 @@ Route::group(function () {
     Route::post('switch_h5', 'AuthController/switch_h5')->name('switch_h5');// 切换账号
     Route::post('binding', 'AuthController/binding_phone')->name('bindingPhone');// 绑定手机号
     Route::post('trade', 'user.UserController/tradeIntegral')->name('tradeIntegral');// 积分转帐
-    Route::post('yue/trade', 'user.UserController/tradeYue')->name('tradeYue');// 积分转帐
+    Route::post('yue/trade', 'user.UserController/tradeYue')->name('tradeYue');// 余额转帐
+    Route::post('cash/trade', 'user.UserController/tradeCash')->name('tradeCash');// 现金转帐
     Route::post('game/join', 'activity.GameController/join')->name('joinGame');// 参加游戏
     Route::get('game/last', 'activity.GameController/lastGame')->name('lastGame');// 参加游戏
     Route::get('game', 'activity.GameController/index')->name('index');// 参加游戏
@@ -161,6 +162,7 @@ Route::group(function () {
     //提现类
     Route::get('extract/bank', 'user.UserExtractController/bank')->name('extractBank');//提现银行/提现最低金额
     Route::post('extract/cash', 'user.UserExtractController/cash')->name('extractCash');//提现申请
+    Route::post('extract/brokerage', 'user.UserExtractController/exchangeBrokerage')->name('exchangeBrokerage');//佣金转现金
     //充值类
     Route::post('recharge/routine', 'user.UserRechargeController/routine')->name('rechargeRoutine');//小程序充值
     Route::post('recharge/wechat', 'user.UserRechargeController/wechat')->name('rechargeWechat');//公众号充值