2023-02-28 11:55:34 +08:00

176 lines
7.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | Shop-Demo for ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2022~2023 Anyon <zoujingli@qq.com>
// +----------------------------------------------------------------------
// | 官方网站: https://thinkadmin.top
// +----------------------------------------------------------------------
// | 免责声明 ( https://thinkadmin.top/disclaimer )
// | 会员免费 ( https://thinkadmin.top/vip-introduce )
// +----------------------------------------------------------------------
// | gitee 代码仓库https://gitee.com/zoujingli/ThinkAdmin
// | github 代码仓库https://github.com/zoujingli/ThinkAdmin
// +----------------------------------------------------------------------
namespace app\data\controller\api\auth;
use app\data\controller\api\Auth;
use app\data\model\DataUserTransfer;
use app\data\service\UserRebateService;
use app\data\service\UserTransferService;
use think\admin\extend\CodeExtend;
/**
* 用户提现接口
* Class Transfer
* @package app\data\controller\api\auth
*/
class Transfer extends Auth
{
/**
* 提交提现处理
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function add()
{
// 检查用户状态
$this->checkUserStatus();
// 接收输入数据
$data = $this->_vali([
'type.require' => '提现方式不能为空!',
'amount.require' => '提现金额不能为空!',
'remark.default' => '用户提交提现申请!',
]);
$state = UserTransferService::config('status');
if (empty($state)) $this->error('提现还没有开启!');
$transfers = UserTransferService::config('transfer');
if (empty($transfers[$data['type']]['state'])) $this->error('提现方式已停用!');
// 提现数据补充
$data['uuid'] = $this->uuid;
$data['date'] = date('Y-m-d');
$data['code'] = CodeExtend::uniqidDate(20, 'T');
// 提现状态处理
if (empty($transfers[$data['type']]['state']['audit'])) {
$data['status'] = 1;
$data['audit_status'] = 0;
} else {
$data['status'] = 3;
$data['audit_status'] = 1;
$data['audit_remark'] = '提现免审核';
$data['audit_datetime'] = date('Y-m-d H:i:s');
}
// 扣除手续费
$chargeRate = floatval(UserTransferService::config('charge'));
$data['charge_rate'] = $chargeRate;
$data['charge_amount'] = $chargeRate * $data['amount'] / 100;
// 检查可提现余额
[$total, $count] = UserRebateService::amount($this->uuid);
if ($total - $count < $data['amount']) $this->error('可提现余额不足!');
// 提现方式处理
if ($data['type'] == 'alipay_account') {
$data = array_merge($data, $this->_vali([
'alipay_user.require' => '开户姓名不能为空!',
'alipay_code.require' => '支付账号不能为空!',
]));
} elseif (in_array($data['type'], ['wechat_qrcode', 'alipay_qrcode'])) {
$data = array_merge($data, $this->_vali([
'qrcode.require' => '收款码不能为空!',
]));
} elseif (in_array($data['type'], ['wechat_banks', 'transfer_banks'])) {
$data = array_merge($data, $this->_vali([
'bank_wseq.require' => '银行编号不能为空!',
'bank_name.require' => '银行名称不能为空!',
'bank_user.require' => '开户账号不能为空!',
'bank_bran.require' => '银行分行不能为空!',
'bank_code.require' => '银行卡号不能为空!',
]));
} elseif ($data['type'] != 'wechat_wallet') {
$this->error('转账方式不存在!');
}
// 当日提现次数限制
$map = ['uuid' => $this->uuid, 'type' => $data['type'], 'date' => $data['date']];
$count = DataUserTransfer::mk()->where($map)->count();
if ($count >= $transfers[$data['type']]['dayNumber']) $this->error("当日提现次数受限");
// 提现金额范围控制
if ($transfers[$data['type']]['minAmount'] > $data['amount']) {
$this->error("不能少于{$transfers[$data['type']]['minAmount']}");
}
if ($transfers[$data['type']]['maxAmount'] < $data['amount']) {
$this->error("不能大于{$transfers[$data['type']]['maxAmount']}");
}
// 写入用户提现数据
if (DataUserTransfer::mk()->insert($data) !== false) {
UserRebateService::amount($this->uuid);
$this->success('提现申请成功');
} else {
$this->error('提现申请失败');
}
}
/**
* 用户提现记录
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function get()
{
$query = DataUserTransfer::mQuery()->where(['uuid' => $this->uuid]);
$result = $query->like('date,code')->in('status')->order('id desc')->page(true, false, false, 10);
// 统计历史数据
$map = [['uuid', '=', $this->uuid], ['status', '>', 0]];
[$total, $count, $locks] = UserRebateService::amount($this->uuid);
$this->success('获取提现成功', array_merge($result, [
'total' => [
'锁定' => $locks,
'可提' => $total - $count,
'上月' => DataUserTransfer::mk()->where($map)->whereLike('date', date("Y-m-%", strtotime('-1 month')))->sum('amount'),
'本月' => DataUserTransfer::mk()->where($map)->whereLike('date', date("Y-m-%"))->sum('amount'),
'全年' => DataUserTransfer::mk()->where($map)->whereLike('date', date("Y-%"))->sum('amount'),
],
]));
}
/**
* 用户取消提现
*/
public function cancel()
{
$data = $this->_vali(['uuid.value' => $this->uuid, 'code.require' => '单号不能为空!']);
DataUserTransfer::mk()->where($data)->whereIn('status', [1, 2, 3])->update([
'status' => 0, 'change_time' => date("Y-m-d H:i:s"), 'change_desc' => '用户主动取消提现',
]);
UserRebateService::amount($this->uuid);
$this->success('取消提现成功');
}
/**
* 用户确认提现
*/
public function confirm()
{
$data = $this->_vali(['uuid.value' => $this->uuid, 'code.require' => '单号不能为空!']);
DataUserTransfer::mk()->where($data)->whereIn('status', [4])->update([
'status' => 5, 'change_time' => date("Y-m-d H:i:s"), 'change_desc' => '用户主动确认收款',
]);
UserRebateService::amount($this->uuid);
$this->success('确认收款成功');
}
/**
* 获取用户提现配置
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function config()
{
$data = UserTransferService::config();
$data['banks'] = UserTransferService::instance()->banks();
$this->success('获取用户提现配置', $data);
}
}