183 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace app\api\logic;
 | |
| 
 | |
| use app\common\basics\Logic;
 | |
| use app\common\logic\AccountLogLogic;
 | |
| use app\common\model\{AccountLog, Withdraw, WithdrawApply};
 | |
| use app\common\model\user\User;
 | |
| use app\common\enum\WithdrawEnum;
 | |
| use app\common\server\ConfigServer;
 | |
| use think\facade\Db;
 | |
| use think\Exception;
 | |
| 
 | |
| /***
 | |
|  * Class WithdrawLogic 会员提现
 | |
|  * @package app\api\logic
 | |
|  */
 | |
| class WithdrawLogic extends Logic
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * @notes 基础配置
 | |
|      * @param $user_id
 | |
|      * @return array
 | |
|      * @throws \think\db\exception\DataNotFoundException
 | |
|      * @throws \think\db\exception\DbException
 | |
|      * @throws \think\db\exception\ModelNotFoundException
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:26 下午
 | |
|      */
 | |
|     public static function config($user_id)
 | |
|     {
 | |
| 
 | |
|         $user = User::where('id', $user_id)->find();
 | |
|         $config = [
 | |
|             'able_withdraw' => $user['earnings'] ? $user['earnings'] : 0,
 | |
|             'min_withdraw' => ConfigServer::get('withdraw', 'min_withdraw', 0),//最低提现金额;
 | |
|             'max_withdraw' => ConfigServer::get('withdraw', 'max_withdraw', 0),//最高提现金额;
 | |
|             'poundage_percent' => ConfigServer::get('withdraw', 'poundage', 0),//提现手续费;
 | |
|         ];
 | |
| 
 | |
|         $types = ConfigServer::get('withdraw', 'type', [1]); //提现方式,若未设置默认为提现方式为钱包
 | |
|         // 封装提现方式
 | |
|         $config['type'] = [];
 | |
|         if ($types) {
 | |
|             foreach ($types as $value) {
 | |
|                 $config['type'][] = [
 | |
|                     'name' => WithdrawEnum::getTypeDesc($value),
 | |
|                     'value' => $value
 | |
|                 ];
 | |
|             }
 | |
|         }
 | |
|         return $config;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @notes 申请提现
 | |
|      * @param $user_id
 | |
|      * @param $post
 | |
|      * @return int|string
 | |
|      * @throws Exception
 | |
|      * @throws \think\exception\PDOException
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:26 下午
 | |
|      */
 | |
|     public static function apply($user_id, $post)
 | |
|     {
 | |
| 
 | |
|         Db::startTrans();
 | |
|         try {
 | |
|             //提现手续费
 | |
|             $poundage = 0;
 | |
|             if ($post['type'] != WithdrawEnum::TYPE_BALANCE) {
 | |
|                 $poundage_config = ConfigServer::get('withdraw', 'poundage', 0);
 | |
|                 $poundage = $post['money'] * $poundage_config / 100;
 | |
|             }
 | |
| 
 | |
|             $data = [
 | |
|                 'sn' => createSn('withdraw_apply', 'sn'),
 | |
|                 'user_id' => $user_id,
 | |
|                 'type' => $post['type'],
 | |
|                 'account' => $post['account'] ?? '',
 | |
|                 'real_name' => $post['real_name'] ?? '',
 | |
|                 'money' => $post['money'],
 | |
|                 'left_money' => $post['money'] - $poundage,
 | |
|                 'money_qr_code' => $post['money_qr_code'] ?? '',
 | |
|                 'remark' => $post['remark'] ?? '',
 | |
|                 'bank' => $post['bank'] ?? '',
 | |
|                 'subbank' => $post['subbank'] ?? '',
 | |
|                 'poundage' => $poundage,
 | |
|                 'status' => 1, // 待提现
 | |
|                 'create_time' => time(),
 | |
|             ];
 | |
|             $withdraw_id = WithdrawApply::insertGetId($data);
 | |
| 
 | |
|             //提交申请后,扣减用户的佣金
 | |
|             $user = User::find($user_id);
 | |
|             $user->earnings = ['dec', $post['money']];
 | |
|             $user->save();
 | |
|             //增加佣金变动记录
 | |
|             AccountLogLogic::AccountRecord(
 | |
|                 $user_id,
 | |
|                 $post['money'],
 | |
|                 2,
 | |
|                 AccountLog::withdraw_dec_earnings,
 | |
|                 '',
 | |
|                 $withdraw_id,
 | |
|                 $data['sn']
 | |
|             );
 | |
| 
 | |
|             Db::commit();
 | |
|             return $withdraw_id;
 | |
|         } catch (Exception $e) {
 | |
|             Db::rollback();
 | |
|             throw new Exception($e->getMessage());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @notes 提现记录
 | |
|      * @param $user_id
 | |
|      * @param $get
 | |
|      * @param $page
 | |
|      * @param $size
 | |
|      * @return array
 | |
|      * @throws \think\db\exception\DataNotFoundException
 | |
|      * @throws \think\db\exception\DbException
 | |
|      * @throws \think\db\exception\ModelNotFoundException
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:26 下午
 | |
|      */
 | |
|     public static function records($user_id, $get, $page, $size)
 | |
|     {
 | |
| 
 | |
|         $count = WithdrawApply
 | |
|             ::where(['user_id' => $user_id])
 | |
|             ->count();
 | |
| 
 | |
|         $lists = WithdrawApply::where(['user_id' => $user_id])
 | |
|             ->order('create_time desc')
 | |
|             ->select();
 | |
| 
 | |
|         foreach ($lists as &$item) {
 | |
|             $item['desc'] = '提现至' . WithdrawEnum::getTypeDesc($item['type']);
 | |
|             $item['status_text'] = WithdrawEnum::getStatusDesc($item['status']);
 | |
|         }
 | |
| 
 | |
|         $data = [
 | |
|             'list' => $lists,
 | |
|             'page' => $page,
 | |
|             'size' => $size,
 | |
|             'count' => $count,
 | |
|             'more' => is_more($count, $page, $size)
 | |
|         ];
 | |
|         return $data;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @notes 提现详情
 | |
|      * @param $id
 | |
|      * @param $user_id
 | |
|      * @return array
 | |
|      * @throws \think\db\exception\DataNotFoundException
 | |
|      * @throws \think\db\exception\DbException
 | |
|      * @throws \think\db\exception\ModelNotFoundException
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:26 下午
 | |
|      */
 | |
|     public static function info($id, $user_id)
 | |
|     {
 | |
| 
 | |
|         $info = WithdrawApply::field('status, sn, create_time, type, money, left_money, poundage')
 | |
|             ->where(['id' => $id, 'user_id' => $user_id])
 | |
|             ->find()->toArray();
 | |
| 
 | |
|         if (!$info) {
 | |
|             return [];
 | |
|         }
 | |
|         $info['typeDesc'] = WithdrawEnum::getTypeDesc($info['type']);
 | |
|         $info['statusDesc'] = WithdrawEnum::getStatusDesc($info['status']);
 | |
|         return $info;
 | |
|     }
 | |
| } |