You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
11 KiB
312 lines
11 KiB
2 years ago
|
<?php
|
||
|
|
||
|
namespace app\admin\controller\shopro;
|
||
|
|
||
|
use app\admin\model\shopro\user\User;
|
||
|
use app\common\controller\Backend;
|
||
|
use think\Db;
|
||
|
use addons\shopro\library\Export;
|
||
|
use addons\shopro\model\UserWalletApply as WithDraw;
|
||
|
|
||
|
/**
|
||
|
* 用户提现
|
||
|
*
|
||
|
* @icon fa fa-circle-o
|
||
|
*/
|
||
|
class UserWalletApply extends Base
|
||
|
{
|
||
|
protected $noNeedRight = ['getType'];
|
||
|
|
||
|
/**
|
||
|
* UserWalletApply模型对象
|
||
|
* @var \app\admin\model\shopro\UserWalletApply
|
||
|
*/
|
||
|
protected $model = null;
|
||
|
|
||
|
public function _initialize()
|
||
|
{
|
||
|
parent::_initialize();
|
||
|
$this->model = new \app\admin\model\shopro\UserWalletApply;
|
||
|
$this->view->assign("getTypeList", $this->model->getApplyTypeList());
|
||
|
$this->view->assign("statusList", $this->model->getStatusList());
|
||
|
$this->assignconfig('typeList', $this->model->getApplyTypeList());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
|
||
|
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
|
||
|
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* 查看
|
||
|
*/
|
||
|
public function index()
|
||
|
{
|
||
|
//设置过滤方法
|
||
|
$this->request->filter(['strip_tags', 'trim']);
|
||
|
if ($this->request->isAjax()) {
|
||
|
//如果发送的来源是Selectpage,则转发到Selectpage
|
||
|
if ($this->request->request('keyField')) {
|
||
|
return $this->selectpage();
|
||
|
}
|
||
|
|
||
|
$nobuildfields = ['user_nickname', 'user_mobile'];
|
||
|
list($where, $sort, $order, $offset, $limit) = $this->custombuildparams(null, $nobuildfields);
|
||
|
|
||
|
$total = $this->buildSearch()
|
||
|
->where($where)
|
||
|
->order($sort, $order)
|
||
|
->count();
|
||
|
|
||
|
$list = $this->buildSearch()
|
||
|
->with('user')
|
||
|
->where($where)
|
||
|
->order($sort, $order)
|
||
|
->limit($offset, $limit)
|
||
|
->select();
|
||
|
|
||
|
$result = array("total" => $total, "rows" => $list);
|
||
|
|
||
|
return $this->success('操作成功', null, $result);
|
||
|
}
|
||
|
return $this->view->fetch();
|
||
|
}
|
||
|
|
||
|
|
||
|
// 提现导出
|
||
|
public function export()
|
||
|
{
|
||
|
$nobuildfields = ['user_nickname', 'user_mobile'];
|
||
|
list($where, $sort, $order, $offset, $limit) = $this->custombuildparams(null, $nobuildfields);
|
||
|
|
||
|
$expCellName = [
|
||
|
'id' => 'Id',
|
||
|
'apply_sn' => '提现单号',
|
||
|
'user_nickname' => '用户姓名',
|
||
|
'user_phone' => '手机号',
|
||
|
'money' => '提现金额',
|
||
|
'actual_money' => '实际到账',
|
||
|
'charge_money' => '手续费',
|
||
|
'service_fee' => '手续费率',
|
||
|
'apply_type' => '提现方式',
|
||
|
'apply_info' => '打款信息',
|
||
|
'status' => '状态',
|
||
|
'createtime' => '申请时间',
|
||
|
'updatetime' => '处理时间',
|
||
|
];
|
||
|
|
||
|
$export = new Export();
|
||
|
$spreadsheet = null;
|
||
|
$sheet = null;
|
||
|
|
||
|
$total = $this->buildSearch()->where($where)->order($sort, $order)->count();
|
||
|
$page_size = 2000;
|
||
|
$total_page = intval(ceil($total / $page_size));
|
||
|
$newList = [];
|
||
|
$money_total = 0; // 提现总金额
|
||
|
$actual_money_total = 0; // 到账总金额
|
||
|
$charge_money_total = 0; // 手续费总金额
|
||
|
|
||
|
if ($total == 0) {
|
||
|
$this->error('导出数据为空');
|
||
|
}
|
||
|
|
||
|
for ($i = 0; $i < $total_page; $i++) {
|
||
|
$page = $i + 1;
|
||
|
$is_last_page = ($page == $total_page) ? true : false;
|
||
|
|
||
|
$list = $this->buildSearch()
|
||
|
->with('user')
|
||
|
->where($where)
|
||
|
->order($sort, $order)
|
||
|
->limit(($i * $page_size), $page_size)
|
||
|
->select();
|
||
|
|
||
|
$list = collection($list)->toArray();
|
||
|
|
||
|
$newList = [];
|
||
|
foreach ($list as $key => $apply) {
|
||
|
$applyinfo = '';
|
||
|
foreach ($apply['apply_info_text'] as $name => $info) {
|
||
|
$applyinfo .= $name . ':' . $info . " \n";
|
||
|
}
|
||
|
|
||
|
$newList[] = [
|
||
|
'id' => $apply['id'],
|
||
|
'apply_sn' => $apply['apply_sn'],
|
||
|
'user_nickname' => $apply['user'] ? (strpos($apply['user']['nickname'], '=') === 0 ? ' ' . $apply['user']['nickname'] : $apply['user']['nickname']) : '',
|
||
|
'user_phone' => $apply['user'] ? $apply['user']['mobile'] . ' ' : '',
|
||
|
'money' => $apply['money'] . '元',
|
||
|
'actual_money' => $apply['actual_money'] . '元',
|
||
|
'charge_money' => $apply['charge_money'] . '元',
|
||
|
'service_fee' => $apply['service_fee'],
|
||
|
'apply_type' => $apply['apply_type_text'],
|
||
|
'apply_info' => $applyinfo,
|
||
|
'status' => $apply['status_text'],
|
||
|
'createtime' => date('Y-m-d H:i:s', $apply['createtime']),
|
||
|
'updatetime' => date('Y-m-d H:i:s', $apply['updatetime']),
|
||
|
];
|
||
|
|
||
|
$money_total += $apply['money']; // 提现总金额
|
||
|
$actual_money_total += $apply['actual_money']; // 到账总金额
|
||
|
$charge_money_total += $apply['charge_money']; // 手续费总金额
|
||
|
}
|
||
|
|
||
|
if ($is_last_page) {
|
||
|
$newList[] = [
|
||
|
'id' => "提现申请总数:" . $total . ";提现总金额:¥" . $money_total . ";到账总金额:¥" . $actual_money_total . ";手续费总金额:¥" . $charge_money_total . ";"
|
||
|
];
|
||
|
}
|
||
|
|
||
|
$export->exportExcel('提现列表-' . date('Y-m-d H:i:s'), $expCellName, $newList, $spreadsheet, $sheet, [
|
||
|
'page' => $page,
|
||
|
'page_size' => $page_size,
|
||
|
'is_last_page' => $is_last_page
|
||
|
]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// 获取要查询的提现类型
|
||
|
public function getType()
|
||
|
{
|
||
|
$apply_type = $this->model->getApplyTypeList();
|
||
|
$status = $this->model->getStatusList();
|
||
|
|
||
|
$result = [
|
||
|
'apply_type' => $apply_type,
|
||
|
'status' => $status,
|
||
|
];
|
||
|
|
||
|
$data = [];
|
||
|
foreach ($result as $key => $list) {
|
||
|
$data[$key][] = ['name' => '全部', 'type' => 'all'];
|
||
|
|
||
|
foreach ($list as $k => $v) {
|
||
|
$data[$key][] = [
|
||
|
'name' => $v,
|
||
|
'type' => $k
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $this->success('操作成功', null, $data);
|
||
|
}
|
||
|
|
||
|
public function handle($ids)
|
||
|
{
|
||
|
$successCount = 0;
|
||
|
$failedCount = 0;
|
||
|
$ids = explode(',', $ids);
|
||
|
$applyList = $this->model->where('id', 'in', $ids)->select();
|
||
|
if (!$applyList) {
|
||
|
$this->error('未找到该提现申请');
|
||
|
}
|
||
|
$operate = $this->request->post('operate');
|
||
|
foreach ($applyList as $apply) {
|
||
|
Db::startTrans();
|
||
|
try {
|
||
|
switch ($operate) {
|
||
|
case '1':
|
||
|
WithDraw::handleAgree($apply);
|
||
|
$apply->status === 1 ? $successCount++ : $failedCount++;
|
||
|
break;
|
||
|
case '2':
|
||
|
WithDraw::handleWithdraw($apply);
|
||
|
$apply->status === 2 ? $successCount++ : $failedCount++;
|
||
|
break;
|
||
|
case '3':
|
||
|
WithDraw::handleAgree($apply);
|
||
|
WithDraw::handleWithdraw($apply);
|
||
|
$apply->status === 2 ? $successCount++ : $failedCount++;
|
||
|
break;
|
||
|
case '-1':
|
||
|
$rejectInfo = $this->request->post('rejectInfo');
|
||
|
if (!$rejectInfo) {
|
||
|
throw new \Exception('请输入拒绝原因');
|
||
|
}
|
||
|
WithDraw::handleReject($apply, $rejectInfo);
|
||
|
$apply->status === -1 ? $successCount++ : $failedCount++;;
|
||
|
break;
|
||
|
}
|
||
|
// 提现结果通知
|
||
|
$user = \addons\shopro\model\User::get($apply->user_id);
|
||
|
$user && $user->notify(
|
||
|
new \addons\shopro\notifications\Wallet([
|
||
|
'apply' => $apply,
|
||
|
'event' => 'wallet_apply'
|
||
|
])
|
||
|
);
|
||
|
Db::commit();
|
||
|
} catch (\Exception $e) {
|
||
|
Db::rollback();
|
||
|
WithDraw::handleLog($apply, '失败: ' . $e->getMessage());
|
||
|
$failedCount++;
|
||
|
$lastErrorMessage = $e->getMessage();
|
||
|
}
|
||
|
}
|
||
|
if (count($ids) === 1) {
|
||
|
if ($successCount) $this->success('操作成功');
|
||
|
if ($failedCount) $this->error($lastErrorMessage);
|
||
|
} else {
|
||
|
$this->success('成功: ' . $successCount . '笔' . ' | 失败: ' . $failedCount . '笔');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function log($id)
|
||
|
{
|
||
|
$apply = $this->model->get($id);
|
||
|
if (!$apply) {
|
||
|
$this->error('未找到该提现日志');
|
||
|
}
|
||
|
$applyLog = $apply->log;
|
||
|
if ($applyLog) {
|
||
|
foreach ($applyLog as &$log) {
|
||
|
$log['oper'] = \addons\shopro\library\Oper::get($log['oper_type'], $log['oper_id']);
|
||
|
}
|
||
|
}
|
||
|
$this->success('提现日志', null, $applyLog);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 提现搜索
|
||
|
*
|
||
|
* @return object
|
||
|
*/
|
||
|
public function buildSearch()
|
||
|
{
|
||
|
$filter = $this->request->get("filter", '');
|
||
|
$filter = (array)json_decode($filter, true);
|
||
|
$filter = $filter ? $filter : [];
|
||
|
|
||
|
$user_nickname = isset($filter['user_nickname']) ? $filter['user_nickname'] : '';
|
||
|
$user_mobile = isset($filter['user_mobile']) ? $filter['user_mobile'] : '';
|
||
|
|
||
|
// 当前表名
|
||
|
$tableName = $this->model->getQuery()->getTable();
|
||
|
|
||
|
$applys = $this->model;
|
||
|
|
||
|
// 购买人查询
|
||
|
if ($user_nickname || $user_mobile) {
|
||
|
$applys = $applys->whereExists(function ($query) use ($user_nickname, $user_mobile, $tableName) {
|
||
|
$userTableName = (new \app\admin\model\User())->getQuery()->getTable();
|
||
|
$query = $query->table($userTableName)->where($userTableName . '.id=' . $tableName . '.user_id');
|
||
|
|
||
|
if ($user_nickname) {
|
||
|
$query = $query->where('nickname', 'like', "%{$user_nickname}%");
|
||
|
}
|
||
|
|
||
|
if ($user_mobile) {
|
||
|
$query = $query->where('mobile', 'like', "%{$user_mobile}%");
|
||
|
}
|
||
|
|
||
|
return $query;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return $applys;
|
||
|
}
|
||
|
}
|