Prechádzať zdrojové kódy

代码整理,整理提现UserExtract 代码

joe 4 rokov pred
rodič
commit
3f13161b67

+ 1 - 0
.gitignore

@@ -5,3 +5,4 @@ public/install/install.lock
 *.log
 *.xlsx
 *.xls
+*.pid

+ 45 - 9
app/admin/controller/finance/UserExtract.php

@@ -52,6 +52,10 @@ class UserExtract extends AuthController
         return $this->fetch();
     }
 
+    /**
+     * 后台编辑提现信息
+     * @param $id: user_extract 表 id
+     */
     public function edit($id)
     {
         if (!$id) return $this->failed('数据不存在');
@@ -74,6 +78,11 @@ class UserExtract extends AuthController
         return $this->fetch('public/form-builder');
     }
 
+    /**
+     * 处理 edit 提交的信息
+     * 
+     * 根据提现通道的不一样,POST 的数据也不一样
+     */
     public function update($id)
     {
         $UserExtract = UserExtractModel::get($id);
@@ -117,32 +126,59 @@ class UserExtract extends AuthController
             return JsonService::successful('修改成功!');
     }
 
+    /**
+     * 拒绝提现操作
+     */
     public function fail($id)
     {
-        if (!UserExtractModel::be(['id' => $id, 'status' => 0])) return JsonService::fail('操作记录不存在或状态错误!');
+        if (!UserExtractModel::be(['id' => $id, 'status' => EXTRACT_AUDITING])) {
+            return JsonService::fail('操作记录不存在或状态错误!');
+        }
         $fail_msg = request()->post();
         $extract = UserExtractModel::get($id);
-        if (!$extract) return JsonService::fail('操作记录不存在!');
-        if ($extract->status == 1) return JsonService::fail('已经提现,错误操作');
-        if ($extract->status == -1) return JsonService::fail('您的提现申请已被拒绝,请勿重复操作!');
+        if (!$extract) {
+            return JsonService::fail('操作记录不存在!');
+        }
+        if ($extract->status == EXTRACT_SUC) {
+            return JsonService::fail('已经提现,错误操作');
+        }
+        if ($extract->status == EXTRACT_FAILED) {
+            return JsonService::fail('您的提现申请已被拒绝,请勿重复操作!');
+        }
+        UserExtractModel::beginTrans();
         $res = UserExtractModel::changeFail($id, $fail_msg['message']);
         if ($res) {
+            UserExtractModel::rollbackTrans();
             event('UserExtractFail', [$extract, $fail_msg]);
             return JsonService::successful('操作成功!');
         } else {
+            UserExtractModel::commitTrans();
             return JsonService::fail('操作失败!');
         }
     }
 
+    /**
+     * 提现通过操作
+     * @param int $id: user_extract 表 id
+     */
     public function succ($id)
     {
-        if (!UserExtractModel::be(['id' => $id, 'status' => 0]))
+        if (!UserExtractModel::be(['id' => $id, 'status' => EXTRACT_AUDITING])) {
             return JsonService::fail('操作记录不存在或状态错误!');
-        UserExtractModel::beginTrans();
+        }
+            
         $extract = UserExtractModel::get($id);
-        if (!$extract) return JsonService::fail('操作记录不存!');
-        if ($extract->status == 1) return JsonService::fail('您已提现,请勿重复提现!');
-        if ($extract->status == -1) return JsonService::fail('您的提现申请已被拒绝!');
+        if (!$extract) {
+            return JsonService::fail('操作记录不存!');
+        }
+        if ($extract->status == EXTRACT_SUC) {
+            return JsonService::fail('您已提现,请勿重复提现!');
+        }
+        if ($extract->status == EXTRACT_FAILED) {
+            return JsonService::fail('您的提现申请已被拒绝!');
+        }
+
+        UserExtractModel::beginTrans();
         $res = UserExtractModel::changeSuccess($id);
         if ($res) {
             UserExtractModel::commitTrans();

+ 19 - 19
app/admin/model/user/UserExtract.php

@@ -41,7 +41,7 @@ class UserExtract extends BaseModel
      * @param $uid
      * @return mixed
      */
-    public static function userExtractTotalPrice($uid, $status = 1, $where = [])
+    public static function userExtractTotalPrice($uid, $status = EXTRACT_SUC, $where = [])
     {
         return self::getModelTime($where, self::where('uid', 'in', $uid)->where('status', $status))->sum('extract_price') ?: 0;
     }
@@ -49,7 +49,7 @@ class UserExtract extends BaseModel
     public static function extractStatistics()
     {
         //待提现金额
-        $data['price'] = floatval(self::where('status', 0)->sum('extract_price'));
+        $data['price'] = floatval(self::where('status', EXTRACT_AUDITING)->sum('extract_price'));
         //总获得
         $sum = UserBill::getBrokerageCount();
         //退款扣除
@@ -57,7 +57,7 @@ class UserExtract extends BaseModel
         //佣金总金额
         $data['brokerage_count'] = $sum > $lose ? floatval($sum - $lose) : 0;
         //已提现金额
-        $data['priced'] = floatval(self::where('status', 1)->sum('extract_price'));
+        $data['priced'] = floatval(self::where('status', EXTRACT_SUC)->sum('extract_price'));
         //未提现金额
         $data['brokerage_not'] = bcsub(bcsub($data['brokerage_count'], $data['priced'], 2), $data['price'], 2);
         return compact('data');
@@ -92,7 +92,7 @@ class UserExtract extends BaseModel
         $extract_number = $data['extract_price'];
         $mark = '提现失败,退回佣金' . $extract_number . '元';
         $uid = $data['uid'];
-        $status = -1;
+        $status = EXTRACT_FAILED;
         $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');
@@ -154,7 +154,7 @@ class UserExtract extends BaseModel
                 ], Url::buildUrl('/user/cashrecord')->suffix('')->domain(true)->build());
             }
         }
-        return self::edit(['status' => 1], $id);
+        return self::edit(['status' => EXTRACT_SUC], $id);
     }
 
     //测试数据
@@ -173,7 +173,7 @@ class UserExtract extends BaseModel
                 'extract_price' => rand(100, 9999),
                 'mark' => '测试数据',
                 'add_time' => time(),
-                'status' => 1,
+                'status' => EXTRACT_SUC,
                 'wechat' => rand(999, 878788) . $item['uid'],
             ];
             self::create($data);
@@ -184,23 +184,23 @@ class UserExtract extends BaseModel
     public static function getExtractHead()
     {
         //本月提现人数
-        $month = self::getModelTime(['data' => 'month'], self::where('status', 1))->group('uid')->count();
+        $month = self::getModelTime(['data' => 'month'], self::where('status', EXTRACT_SUC))->group('uid')->count();
         //本月提现笔数
-        $new_month = self::getModelTime(['data' => 'month'], self::where('status', 1))->distinct(true)->count();
+        $new_month = self::getModelTime(['data' => 'month'], self::where('status', EXTRACT_SUC))->distinct(true)->count();
         //上月提现人数
-        $last_month = self::whereTime('add_time', 'last month')->where('status', 1)->group('uid')->distinct(true)->count();
+        $last_month = self::whereTime('add_time', 'last month')->where('status', EXTRACT_SUC)->group('uid')->distinct(true)->count();
         //上月提现笔数
-        $last_count = self::whereTime('add_time', 'last month')->where('status', 1)->count();
+        $last_count = self::whereTime('add_time', 'last month')->where('status', EXTRACT_SUC)->count();
         //本月提现金额
-        $extract_price = self::getModelTime(['data' => 'month'], self::where('status', 1))->sum('extract_price');
+        $extract_price = self::getModelTime(['data' => 'month'], self::where('status', EXTRACT_SUC))->sum('extract_price');
         //上月提现金额
-        $last_extract_price = self::whereTime('add_time', 'last month')->where('status', 1)->sum('extract_price');
+        $last_extract_price = self::whereTime('add_time', 'last month')->where('status', EXTRACT_SUC)->sum('extract_price');
 
         return [
             [
                 'name' => '总提现人数',
                 'field' => '个',
-                'count' => self::where('status', 1)->group('uid')->count(),
+                'count' => self::where('status', EXTRACT_SUC)->group('uid')->count(),
                 'content' => '',
                 'background_color' => 'layui-bg-blue',
                 'sum' => '',
@@ -209,7 +209,7 @@ class UserExtract extends BaseModel
             [
                 'name' => '总提现笔数',
                 'field' => '笔',
-                'count' => self::where('status', 1)->distinct(true)->count(),
+                'count' => self::where('status', EXTRACT_SUC)->distinct(true)->count(),
                 'content' => '',
                 'background_color' => 'layui-bg-cyan',
                 'sum' => '',
@@ -239,7 +239,7 @@ class UserExtract extends BaseModel
                 'count' => $extract_price,
                 'content' => '提现总金额',
                 'background_color' => 'layui-bg-cyan',
-                'sum' => self::where('status', 1)->sum('extract_price'),
+                'sum' => self::where('status', EXTRACT_SUC)->sum('extract_price'),
                 'class' => 'fa fa-line-chart',
             ],
             [
@@ -276,7 +276,7 @@ class UserExtract extends BaseModel
     public static function getExtractList($where, $limit = 15)
     {
         $legdata = ['提现人数', '提现金额'];
-        $list = self::getModelTime($where, self::where('status', 1))
+        $list = self::getModelTime($where, self::where('status', EXTRACT_SUC))
             ->field('FROM_UNIXTIME(add_time,"%Y-%c-%d") as un_time,count(uid) as count,sum(extract_price) as sum_price')->group('un_time')->order('un_time asc')->select();
         if (count($list)) $list = $list->toArray();
         $xdata = [];
@@ -298,10 +298,10 @@ class UserExtract extends BaseModel
         if (count($xdata) > $limit) $zoom = $xdata[$limit - 5];
         //饼状图
         $cake = ['支付宝', '银行卡', '微信'];
-        $fenbulist = self::getModelTime($where, self::where('status', 1))
+        $fenbulist = self::getModelTime($where, self::where('status', EXTRACT_SUC))
             ->field('count(uid) as count,extract_type')->group('extract_type')->order('count asc')->select();
         if (count($fenbulist)) $fenbulist = $fenbulist->toArray();
-        $sum_count = self::getModelTime($where, self::where('status', 1))->count();
+        $sum_count = self::getModelTime($where, self::where('status', EXTRACT_SUC))->count();
         $color = ['#FB7773', '#81BCFE', '#91F3FE'];
         $fenbudata = [];
         foreach ($fenbulist as $key => $item) {
@@ -327,7 +327,7 @@ class UserExtract extends BaseModel
     public static function getUserCountPrice($uid = 0)
     {
         if (!$uid) return 0;
-        $price = self::where('uid', $uid)->where('status', 1)->sum('extract_price');
+        $price = self::where('uid', $uid)->where('status', EXTRACT_SUC)->sum('extract_price');
         return $price ? $price : 0;
     }
 

+ 15 - 0
app/api/controller/user/UserExtractController.php

@@ -24,6 +24,7 @@ class UserExtractController
     public function bank(Request $request)
     {
         $user = $request->user();
+        // 佣金冻结时间
         $broken_time = intval(sys_config('extract_time'));
         $search_time = time() - 86400 * $broken_time;
         //可提现佣金
@@ -100,4 +101,18 @@ class UserExtractController
             return app('json')->fail(UserExtract::getErrorInfo('提现失败'));
         }
     }
+
+    /**
+     * 即时提現,參數返回值同 cash
+     * 本接口支持即時到帐,调用三方支付提现 API
+     * 
+     * 用户账户必须满足以下规则。
+     * 1. 满足对应提现通道要求,微信支付:每个用户1天限1次,每次限200, 平台每日限额 200,000
+     * 2. 15 日内必须有退款订单。且30日内退款订单金额 > 提现金额
+     * 3. 其他基本需求(最低提现限额等等)
+     */
+    public function cash_now(Request $request) 
+    {
+
+    }
 }

+ 7 - 0
app/common.php

@@ -25,6 +25,13 @@ define('ORDER_WAITING_COMMENT', 3);
 define('REFUND_NO', 0);
 define('REFUNDING', 1);
 define('REFUNDED', 2);
+
+// 提现状态
+// 0 审核中, -1 未通过, 1 已提现
+define('EXTRACT_AUDITING', 0);
+define('EXTRACT_FAILED', -1);
+define('EXTRACT_SUC', 1);
+
 // 配送方式
 // 配送方式 1=快递 ,2=门店自提
 define('SHIPPING_EXPRESS', 1);

+ 56 - 31
app/models/user/UserExtract.php

@@ -33,21 +33,14 @@ class UserExtract extends BaseModel
 
     use ModelTrait;
 
-    //审核中
-    const AUDIT_STATUS = 0;
-    //未通过
-    const FAIL_STATUS = -1;
-    //已提现
-    const SUCCESS_STATUS = 1;
-
     protected static $extractType = ['alipay','bank','weixin'];
 
     protected static $extractTypeMsg = ['alipay'=>'支付宝','bank'=>'银行卡','weixin'=>'微信'];
 
     protected static $status = array(
-        -1=>'未通过',
-        0 =>'审核中',
-        1 =>'已提现'
+        EXTRACT_FAILED   => '未通过',
+        EXTRACT_AUDITING => '审核中',
+        EXTRACT_SUC      => '已提现',
     );
 
     /**
@@ -56,44 +49,76 @@ class UserExtract extends BaseModel
      * @param array $data 提现详细信息
      * @return bool
      */
-    public static function userExtract($userInfo,$data){
-        if(!in_array($data['extract_type'],self::$extractType))
+    public static function userExtract($userInfo, $data){
+        if(!in_array($data['extract_type'], self::$extractType)) {
             return self::setErrorInfo('提现方式不存在');
+        }
+            
         $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');
+        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;
+        if($balance < 0) {
+            $balance = 0;
+        }
         $insertData = [
             'uid' => $userInfo['uid'],
             'extract_type' => $data['extract_type'],
             'extract_price' => $data['money'],
             'add_time' => time(),
             'balance' => $balance,
-            'status' => self::AUDIT_STATUS
+            'status' => EXTRACT_AUDITING,
         ];
-        if(isset($data['name']) && strlen(trim($data['name']))) $insertData['real_name'] = $data['name'];
-        else $insertData['real_name'] = $userInfo['nickname'];
-        if(isset($data['cardnum'])) $insertData['bank_code'] = $data['cardnum'];
-        else $insertData['bank_code'] = '';
-        if(isset($data['bankname'])) $insertData['bank_address']=$data['bankname'];
-        else $insertData['bank_address']='';
-        if(isset($data['weixin'])) $insertData['wechat'] = $data['weixin'];
-        else $insertData['wechat'] = $userInfo['nickname'];
+        if(isset($data['name']) && strlen(trim($data['name']))) {
+            $insertData['real_name'] = $data['name'];
+        } else {
+            $insertData['real_name'] = $userInfo['nickname'];
+        }
+        if(isset($data['cardnum'])) {
+            $insertData['bank_code'] = $data['cardnum'];
+        } else {
+            $insertData['bank_code'] = '';
+        }
+        if(isset($data['bankname'])) {
+            $insertData['bank_address']=$data['bankname'];
+        } else {
+            $insertData['bank_address']='';
+        }
+        if(isset($data['weixin'])) {
+            $insertData['wechat'] = $data['weixin'];
+        } else {
+            $insertData['wechat'] = $userInfo['nickname'];
+        }
         if($data['extract_type'] == 'alipay'){
-            if(!$data['alipay_code']) return self::setErrorInfo('请输入支付宝账号');
+            if(!$data['alipay_code']) {
+                return self::setErrorInfo('请输入支付宝账号');
+            }
             $insertData['alipay_code'] = $data['alipay_code'];
             $mark = '使用支付宝提现'.$insertData['extract_price'].'元';
         }else if($data['extract_type'] == 'bank'){
-            if(!$data['cardnum']) return self::setErrorInfo('请输入银行卡账号');
-            if(!$data['bankname']) return self::setErrorInfo('请输入开户行信息');
+            if(!$data['cardnum']) {
+                return self::setErrorInfo('请输入银行卡账号');
+            }
+            if(!$data['bankname']) {
+                return self::setErrorInfo('请输入开户行信息');
+            }
             $mark = '使用银联卡'.$insertData['bank_code'].'提现'.$insertData['extract_price'].'元';
         }else if($data['extract_type'] == 'weixin'){
-            if(!$data['weixin']) return self::setErrorInfo('请输入微信账号');
+            if(!$data['weixin']) {
+                return self::setErrorInfo('请输入微信账号');
+            }
             $mark = '使用微信提现'.$insertData['extract_price'].'元';
         }
+        
         self::beginTrans();
         try{
             $res1 = self::create($insertData);
@@ -141,7 +166,7 @@ class UserExtract extends BaseModel
      * @param $uid
      * @return mixed
      */
-    public static function userExtractTotalPrice($uid,$status=self::SUCCESS_STATUS)
+    public static function userExtractTotalPrice($uid, $status=EXTRACT_SUC)
     {
         return self::where('uid',$uid)->where('status',$status)->value('SUM(extract_price)')?:0;
     }
@@ -172,7 +197,7 @@ class UserExtract extends BaseModel
      */
     public static function extractSum($uid)
     {
-        return self::where('uid',$uid)->where('status',1)->sum('extract_price');
+        return self::where('uid',$uid)->where('status', EXTRACT_SUC)->sum('extract_price');
     }
 
 }