glhcp/server/app/api/logic/WithdrawLogic.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;
}
}