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', '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"); } }