308 lines
10 KiB
PHP
Executable File
308 lines
10 KiB
PHP
Executable File
<?php
|
|
|
|
namespace app\controller\manager;
|
|
|
|
use app\exception\RepositoryException;
|
|
use app\model\Account;
|
|
use app\model\AccountDataLog;
|
|
use app\model\AccountWithdrawalCommission;
|
|
use app\repository\AccountRepository;
|
|
use app\service\Math;
|
|
use Exception;
|
|
use think\facade\Db;
|
|
use think\response\Json;
|
|
use think\response\View;
|
|
|
|
/**
|
|
* 佣金
|
|
*
|
|
* Class Commission
|
|
* @package app\controller\manager
|
|
*/
|
|
class Commission extends Base
|
|
{
|
|
/**
|
|
* 操作用户佣金
|
|
* */
|
|
public function operation()
|
|
{
|
|
$accountId = input('account_id/d');
|
|
$type = input('type/s', 'commission');
|
|
if ($this->request->isPost()) {
|
|
|
|
$num = input("num/f", 1);
|
|
$remark = input("remark/s", "");
|
|
|
|
$account = AccountRepository::getInstance()->getModel()->findOne(["id" => $accountId], [], function ($q) {
|
|
return $q->lock(true);
|
|
});
|
|
if (empty($account)) {
|
|
return $this->json(4001, "用户不存在");
|
|
}
|
|
Db::startTrans();
|
|
try {
|
|
|
|
$saveData = [$type => ($account[$type] + $num)];
|
|
|
|
//写入用户记录
|
|
AccountDataLog::log($accountId,
|
|
"后台操作",
|
|
$num,
|
|
$type,
|
|
AccountDataLog::ACTION_ADMIN_OPERATION,
|
|
($account[$type] + $num),
|
|
$this->auth['nickname'] ?? "",
|
|
$this->auth['user_id'] ?? 0,
|
|
$remark
|
|
);
|
|
|
|
//保存用户
|
|
$account->save($saveData);
|
|
|
|
Db::commit();
|
|
return $this->json();
|
|
} catch (RepositoryException $e) {
|
|
Db::rollback();
|
|
return $this->json("4000", "佣金操作失败:".$e->getMessage());
|
|
} catch (Exception $e) {
|
|
Db::rollback();
|
|
\think\facade\Log::error('佣金操作失败'.$e->getMessage().' file:'.$e->getFile().' line:'.$e->getLine());
|
|
return $this->json("5003", "佣金操作失败");
|
|
}
|
|
|
|
}
|
|
$this->data["accountId"] = $accountId;
|
|
$this->data["type"] = $type;
|
|
return $this->view();
|
|
}
|
|
|
|
/**
|
|
* 处理搜索条件
|
|
*
|
|
* @param array $searchParams
|
|
* @return array[]
|
|
*/
|
|
protected function handleSearch(array $searchParams): array
|
|
{
|
|
$search = [];
|
|
$accountWhere = [];
|
|
if (!empty($searchParams)) {
|
|
foreach ($searchParams as $key => $param) {
|
|
if (!empty($param)) {
|
|
if (in_array($key, ['created_at', 'change_type', 'action'])) {
|
|
switch ($key) {
|
|
case 'created_at':
|
|
case 'action':
|
|
$search[] = ['self.'.$key, 'like', '%'.$param.'%'];
|
|
break;
|
|
case 'change_type':
|
|
$search[] = $param == 'in' ? ['num', '>', 0] : ['num', '<', 0];
|
|
break;
|
|
}
|
|
} else {
|
|
$accountWhere[] = [$key, 'like', '%'.$param.'%'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ['search' => $search, 'accountWhere' => $accountWhere];
|
|
}
|
|
|
|
/**
|
|
* 用户佣金排行 按降序排列
|
|
*
|
|
* @return Json|View
|
|
* @throws Exception
|
|
*/
|
|
public function index()
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$page = input('page/d', 1);
|
|
$limit = input('size/d', 10);
|
|
$params = input('searchParams');
|
|
$keyword = $params['keyword'] ?? '';
|
|
|
|
$where[] = ['phone_active', '=', Account::COMMON_ON];
|
|
$items = AccountRepository::getInstance()->findList($where, [], $page, $limit, function ($q) use ($keyword) {
|
|
return $q->when(!empty($keyword), function ($qa) use ($keyword) {
|
|
$qa->where('real_name|mobile|nickname', 'like', '%'.$keyword.'%');
|
|
});
|
|
}, ["commission" => "desc", "id" => "desc"]);
|
|
|
|
return $this->json(0, '操作成功', $items);
|
|
}
|
|
|
|
return $this->view();
|
|
}
|
|
|
|
/**
|
|
* 查看单个用户的佣金记录
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
public function personal()
|
|
{
|
|
$accountId = input("account_id/d", 0);
|
|
if ($this->request->isPost()) {
|
|
$page = input('page/d', 1);
|
|
$limit = input('size/d', 10);
|
|
$search = [];
|
|
$search[] = ["account_id", '=', $accountId];
|
|
$search[] = ["type", '=', AccountDataLog::TYPE_COMMISSION];
|
|
$items = AccountDataLog::findList($search, [], $page, $limit,
|
|
function ($q) {
|
|
return $q->with(["account"]);
|
|
}, ["id" => "desc"]);
|
|
$items['list'] = $items['list']->each(function ($item) {
|
|
$item->nickname = $item->account->nickname ?? '';
|
|
$item->real_name = $item->account->real_name ?? '';
|
|
$item->mobile = $item->account->mobile ?? '';
|
|
});
|
|
return $this->json(0, '操作成功', $items);
|
|
}
|
|
|
|
$this->data["accountId"] = $accountId;
|
|
return $this->view();
|
|
}
|
|
|
|
/**
|
|
* 查看所有用户的佣金记录
|
|
**/
|
|
public function log()
|
|
{
|
|
$accountId = input('account_id', 0);
|
|
if ($this->request->isPost()) {
|
|
$page = input('page/d', 1);
|
|
$limit = input('size/d', 10);
|
|
|
|
$searchParams = input('searchParams', []);
|
|
|
|
$accountWhere = [];
|
|
$search = [];
|
|
$search[] = ["type", '=', AccountDataLog::TYPE_COMMISSION];
|
|
if ($accountId > 0) {
|
|
$search[] = ["self.account_id", '=', $accountId];
|
|
}
|
|
|
|
$searchArr = $this->handleSearch($searchParams);
|
|
$search = !empty($searchArr['search']) ? array_merge($search, $searchArr['search']) : $search;
|
|
$accountWhere = !empty($searchArr['accountWhere']) ? array_merge($accountWhere, $searchArr['accountWhere']) : $accountWhere;
|
|
|
|
$field = ['self.*', 'a.nickname', 'a.real_name', 'a.mobile'];
|
|
$items = AccountDataLog::findList($search, $field, $page, $limit,
|
|
function ($q) use ($accountWhere) {
|
|
return $q->alias('self')
|
|
->join('account a', 'a.id = self.account_id')
|
|
->where($accountWhere);
|
|
}, ["id" => "desc"]);
|
|
return $this->json(0, '操作成功', $items);
|
|
}
|
|
|
|
$this->data['accountId'] = $accountId;
|
|
$this->data["changeAction"] = AccountDataLog::commissionAction();
|
|
|
|
return $this->view();
|
|
}
|
|
|
|
/**
|
|
* 提现列表
|
|
* */
|
|
public function withdrawalList()
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$page = input('page/d', 1);
|
|
$limit = input('size/d', 10);
|
|
$items = AccountWithdrawalCommission::findList([], [], $page, $limit,
|
|
function ($q) {
|
|
return $q->with(["account"]);
|
|
}, ["id" => "desc"]);
|
|
return $this->json(0, '操作成功', $items);
|
|
}
|
|
|
|
return $this->view();
|
|
}
|
|
|
|
/**
|
|
* 审核提现
|
|
* */
|
|
public function check(): Json
|
|
{
|
|
$id = input("id/d");
|
|
$status = input("status/d", null);
|
|
if (empty($status)) {
|
|
return $this->json(4001, "错误的状态");
|
|
}
|
|
|
|
if (!$accountCoinWithdrawal = AccountWithdrawalCommission::findById($id, [])) {
|
|
return $this->json(4001, "该提现信息不存在");
|
|
}
|
|
if ($accountCoinWithdrawal['status'] != AccountWithdrawalCommission::$status_default) {
|
|
return $this->json(4001, "该提现不需要审核");
|
|
}
|
|
|
|
$account = AccountRepository::getInstance()->getModel()->findOne(["id" => $accountCoinWithdrawal['account_id']], [], function ($q) {
|
|
return $q->lock(true);
|
|
});
|
|
if (empty($account)) {
|
|
return $this->json(4001, "提现用户信息不存在");
|
|
}
|
|
Db::startTrans();
|
|
try {
|
|
//如果状态是审核失败 退回佣金 写入记录
|
|
if ($status == AccountWithdrawalCommission::$status_fail) {
|
|
//写入--积分佣金日志
|
|
AccountDataLog::log($accountCoinWithdrawal['account']['id'],
|
|
'提现佣金审核失败,退回',
|
|
$accountCoinWithdrawal['number'],
|
|
AccountDataLog::TYPE_COMMISSION,
|
|
AccountDataLog::ACTION_WITHDRAWAL_RETURN,
|
|
Math::add($accountCoinWithdrawal['account']['commission'], $accountCoinWithdrawal['number'])
|
|
);
|
|
//退回到账户
|
|
$account->save([
|
|
'commission' => Math::add($accountCoinWithdrawal['account']['commission'], $accountCoinWithdrawal['number'])
|
|
]);
|
|
}
|
|
|
|
//保存状态
|
|
$accountCoinWithdrawal->save([
|
|
"status" => $status,
|
|
"operator" => $this->auth["nickname"],
|
|
"audit_at" => date("Y-m-d H:i:s")
|
|
]);
|
|
|
|
Db::commit();
|
|
return $this->json();
|
|
} catch (RepositoryException $e) {
|
|
Db::rollback();
|
|
return $this->json(4000, $e->getMessage());
|
|
} catch (Exception $e) {
|
|
Db::rollback();
|
|
\think\facade\Log::error('佣金提现审核失败'.$e->getMessage().' file:'.$e->getFile().' line:'.$e->getLine());
|
|
return $this->json(5003, "审核失败");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 提现配置
|
|
* */
|
|
public function withdrawalConfig()
|
|
{
|
|
if ($this->request->isPost()) {
|
|
try {
|
|
$data = input("post.");
|
|
$php = var_export($data, true);
|
|
file_put_contents(config_path().'extra/commission_withdrawal'.'.php', '<?php'.PHP_EOL.'return '.$php.';');
|
|
return $this->json();
|
|
} catch (Exception $e) {
|
|
return $this->json(4001, $e->getMessage());
|
|
}
|
|
}
|
|
\think\facade\Config::load('extra/commission_withdrawal', 'commission_withdrawal');
|
|
$coinWithdrawal = config('commission_withdrawal');
|
|
$this->data["item"] = $coinWithdrawal;
|
|
return $this->view("/manager/config/commission_withdrawal");
|
|
|
|
}
|
|
}
|