From 9249e0ff004d9357e719c8ed904705ee474b7e3d Mon Sep 17 00:00:00 2001 From: chuan <2154243450@qq.com> Date: Thu, 20 Feb 2025 17:47:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E7=94=A8=E6=88=B7=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/User.php | 8 + app/admin/route/app.php | 7 +- app/admin/service/UserService.php | 452 ++++++++++++++---------- app/admin/validate/RechargeValidate.php | 2 +- app/admin/validate/UserValidate.php | 3 + app/model/UserStageStateModel.php | 18 + 6 files changed, 291 insertions(+), 199 deletions(-) create mode 100644 app/model/UserStageStateModel.php diff --git a/app/admin/controller/User.php b/app/admin/controller/User.php index 0f22c4aa..9e352b44 100644 --- a/app/admin/controller/User.php +++ b/app/admin/controller/User.php @@ -155,4 +155,12 @@ class User extends AdminBaseController $result = $service->frozen($this->request->param(),$this->getAdminId()); return json($result); } + + // 设置用户阶段信息 + public function editUserStage() + { + $service = new UserService(); + $result = $service->editUserStage($this->request->param(),$this->getAdminId()); + return json($result); + } } diff --git a/app/admin/route/app.php b/app/admin/route/app.php index 7c3595a0..9e24c3fa 100644 --- a/app/admin/route/app.php +++ b/app/admin/route/app.php @@ -14,7 +14,7 @@ $header = [ //Route::get('/test', 'Test/index'); Route::post('/test', 'Test/index'); Route::post('/test_upload', 'Upload/uploadVideo'); -Route::post('test_api', 'User/editUserBaseLabel'); +Route::post('test_api', 'User/editUserStage'); Route::group('/', function () { // 上传图片 Route::post('/upload', 'Upload/upload'); @@ -195,8 +195,9 @@ Route::group('/', function () { Route::post('/user/reg_email', 'User/reg_email')->middleware('admin_log'); Route::post('/user/bank', 'User/bankDetail'); Route::post('/user/edit_bank', 'User/editBank')->middleware('admin_log'); - Route::post('/user/edit_password', 'User/editPassword')->middleware('admin_log'); - Route::post('/user/frozen', 'User/frozen'); //用户充值、提款封禁与解封 + Route::post('user/edit_password', 'User/editPassword')->middleware('admin_log'); + Route::post('user/frozen', 'User/frozen'); //用户充值、提款封禁与解封 + Route::post('user/edit_user_stage', 'User/editUserStage'); //编辑用户阶段信息 //送股 Route::post('/user/give_stock', 'setting.GiveStock/add')->middleware('admin_log'); diff --git a/app/admin/service/UserService.php b/app/admin/service/UserService.php index 59091a7e..caf9df59 100644 --- a/app/admin/service/UserService.php +++ b/app/admin/service/UserService.php @@ -19,6 +19,7 @@ use app\model\UserDigitalModel; use app\model\UserForexModel; use app\model\UserLoginLog; use app\model\UserModel; +use app\model\UserStageStateModel; use app\model\UserStockBrlModel; use app\model\UserStockEurModel; use app\model\UserStockFurModel; @@ -124,212 +125,228 @@ class UserService extends AdminBaseService } $userList = UserModel::where($where)->where($whereU)->page($param['page'], $param['limit'])->order('user_id', 'desc')->select(); + if (empty($userList)) { + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => ['market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'is_agent' => $IsAgent, 'agent_list' => $agentNameArr, 'market_rate' => $marketRate, 'market_tape_list' => $tapeList]]); + } $total = UserModel::where($where)->where($whereU)->count(); - $rows = []; - if (!empty($userList)) { - $userIdArr = []; - $parentIdArr = []; - foreach ($userList as $value) { - $userIdArr[] = $value['user_id']; - if ($value['parent_id'] > 0) { - $parentIdArr[] = $value['parent_id']; - } - } - - // 查询父级 - $parentNos = UserModel::where('user_id', 'in', $parentIdArr)->column('user_no', 'user_id'); - // 查询用户余额 - $userContractList = UserContractModel::where('user_id', 'in', $userIdArr) - ->where('contract_id', 'USDT') - ->column('usable_num,frozen_num', 'user_id'); - // 查询用户余额 - $userContractSecList = UserContractSecModel::where('user_id', 'in', $userIdArr) - ->where('contract_id', 'USDT') - ->column('usable_num,frozen_num', 'user_id'); - $userStockList = UserStockModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'USD') - ->column('usable_num,frozen_num', 'user_id'); - $userDigitalList = UserDigitalModel::where('user_id', 'in', $userIdArr) - ->where('digital_id', 'USDT') - ->column('usable_num,frozen_num', 'user_id'); - - // 印尼资产 - $userStockIdrList = UserStockIdnModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'IDR') - ->column('usable_num,frozen_num', 'user_id'); - - // 泰股资产 - $userStockThaList = UserStockThaModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'THB') - ->column('usable_num,frozen_num', 'user_id'); - - // 马股资产 - $userStockMysList = UserStockMysModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'MYR') - ->column('usable_num,frozen_num', 'user_id'); - - // 印度股票资产 - $userStockInList = UserStockInModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'INR') - ->column('usable_num,frozen_num', 'user_id'); - //新加坡股票资产 - $userStockSGDList = UserStockSgdModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'SGD') - ->column('usable_num,frozen_num', 'user_id'); - //基金资产 - $userStockFundList = UserStockFundModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'USD') - ->column('usable_num,frozen_num', 'user_id'); - //印度期权 - $userStockOptionInrList = UserStockOptionInrModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'INR') - ->column('usable_num,frozen_num', 'user_id'); - //港股 - $userStockHkList = UserStockHkdModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'HKD') - ->column('usable_num,frozen_num', 'user_id'); - //英股 - $userStockUkList = UserStockGBXModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'GBX') - ->column('usable_num,frozen_num', 'user_id'); - //法股 - $userStockFurList = UserStockFurModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'EUR') - ->column('usable_num,frozen_num', 'user_id'); - //德股 - $userStockEurList = UserStockEurModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'EUR') - ->column('usable_num,frozen_num', 'user_id'); - //巴西 - $userStockBrlList = UserStockBrlModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'BRL') - ->column('usable_num,frozen_num', 'user_id'); - - $userStockJpList = UserStockJpModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'JPY') - ->column('usable_num,frozen_num', 'user_id'); - //外汇 - $userForexList = UserForexModel::where('user_id', 'in', $userIdArr) - ->where('contract_id', 'USD') - ->column('usable_num,frozen_num', 'user_id'); - - // 用户关联的客服id - $customerRelationList = CustomerRelationalModel::where('user_id', 'in', $userIdArr)->column('customer_id', 'user_id'); - // 获取每个客服的名称 - $customerNames = []; - if ($customerRelationList) { - $customerIds = array_values($customerRelationList); - $customerNames = AdminModel::where('id', 'in', $customerIds)->column('nick_name', 'id'); + $rows = []; + $userIdArr = []; + $parentIdArr = []; + foreach ($userList as $value) { + $userIdArr[] = $value['user_id']; + if ($value['parent_id'] > 0) { + $parentIdArr[] = $value['parent_id']; } + } - // 用户实名认证信息 - $realNameTranslation = UserVerifyLogModel::where('user_id', 'in', $userIdArr) ->column('user_id,name,code,front_img,back_img,status,country', 'user_id'); - if ($realNameTranslation) { - // 获取s3图片 - $frontImgIds = array_column($realNameTranslation, 'front_img'); - $imgArr = AwsS3Model::where('id', 'in', $frontImgIds)->column('s3_url', 'id'); - // 获取国家 - $countryIds = array_column($realNameTranslation, 'country'); - $countryArr = CountryModel::where('id', 'in', $countryIds)->column('name_cn', 'id'); - foreach ($realNameTranslation as $k=>$v) { - if (!empty($v['front_img'])) { - $realNameTranslation[$k]['front_img'] = $imgArr[$v['front_img']] ?? ''; - } - if (!empty($v['country'])) { - $realNameTranslation[$k]['country'] = $countryArr[$v['country']] ?? ''; - } + // 查询父级 + $parentNos = UserModel::where('user_id', 'in', $parentIdArr)->column('user_no', 'user_id'); + + // 查询用户余额 + $userContractList = UserContractModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'USDT') + ->column('usable_num,frozen_num', 'user_id'); + // 查询用户余额 + $userContractSecList = UserContractSecModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'USDT') + ->column('usable_num,frozen_num', 'user_id'); + $userStockList = UserStockModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + $userDigitalList = UserDigitalModel::where('user_id', 'in', $userIdArr) + ->where('digital_id', 'USDT') + ->column('usable_num,frozen_num', 'user_id'); + + // 印尼资产 + $userStockIdrList = UserStockIdnModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'IDR') + ->column('usable_num,frozen_num', 'user_id'); + + // 泰股资产 + $userStockThaList = UserStockThaModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'THB') + ->column('usable_num,frozen_num', 'user_id'); + + // 马股资产 + $userStockMysList = UserStockMysModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'MYR') + ->column('usable_num,frozen_num', 'user_id'); + + // 印度股票资产 + $userStockInList = UserStockInModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'INR') + ->column('usable_num,frozen_num', 'user_id'); + //新加坡股票资产 + $userStockSGDList = UserStockSgdModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'SGD') + ->column('usable_num,frozen_num', 'user_id'); + //基金资产 + $userStockFundList = UserStockFundModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + //印度期权 + $userStockOptionInrList = UserStockOptionInrModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'INR') + ->column('usable_num,frozen_num', 'user_id'); + //港股 + $userStockHkList = UserStockHkdModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'HKD') + ->column('usable_num,frozen_num', 'user_id'); + //英股 + $userStockUkList = UserStockGBXModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'GBX') + ->column('usable_num,frozen_num', 'user_id'); + //法股 + $userStockFurList = UserStockFurModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'EUR') + ->column('usable_num,frozen_num', 'user_id'); + //德股 + $userStockEurList = UserStockEurModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'EUR') + ->column('usable_num,frozen_num', 'user_id'); + //巴西 + $userStockBrlList = UserStockBrlModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'BRL') + ->column('usable_num,frozen_num', 'user_id'); + + $userStockJpList = UserStockJpModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'JPY') + ->column('usable_num,frozen_num', 'user_id'); + //外汇 + $userForexList = UserForexModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + + // 用户关联的客服id + $customerRelationList = CustomerRelationalModel::where('user_id', 'in', $userIdArr)->column('customer_id', 'user_id'); + // 获取每个客服的名称 + $customerNames = []; + if ($customerRelationList) { + $customerIds = array_values($customerRelationList); + $customerNames = AdminModel::where('id', 'in', $customerIds)->column('nick_name', 'id'); + } + + // 查询用户充值、提款冻结状态 + $accountFrozenList = AccountFrozenModel::where('user_id', 'in', $userIdArr)->column('frozen_recharge,frozen_withdraw', 'user_id'); + + // 用户实名认证信息 + $realNameTranslation = UserVerifyLogModel::where('user_id', 'in', $userIdArr)->column('user_id,name,code,front_img,back_img,status,country', 'user_id'); + if ($realNameTranslation) { + // 获取s3图片 + $frontImgIds = array_column($realNameTranslation, 'front_img'); + $imgArr = AwsS3Model::where('id', 'in', $frontImgIds)->column('s3_url', 'id'); + // 获取国家 + $countryIds = array_column($realNameTranslation, 'country'); + $countryArr = CountryModel::where('id', 'in', $countryIds)->column('name_cn', 'id'); + foreach ($realNameTranslation as $k=>$v) { + if (!empty($v['front_img'])) { + $realNameTranslation[$k]['front_img'] = $imgArr[$v['front_img']] ?? ''; + } + if (!empty($v['country'])) { + $realNameTranslation[$k]['country'] = $countryArr[$v['country']] ?? ''; } } + } - //最近登录IP、最近登录国家 - $subQuery = UserLoginLog::field('user_id,MAX(login_date) AS last_login_date') - ->where('user_id', 'in', $userIdArr)->group('user_id')->buildSql(); - $lastLoginLog = UserLoginLog::alias('a')->field('a.id') - ->join([$subQuery => 'w'], 'a.user_id=w.user_id AND a.login_date=w.last_login_date')->column(['id', 'ip', 'country', 'city'], 'a.user_id'); + // 用户阶段信息 + $userStageStateList = UserStageStateModel::where('user_id', 'in', $userIdArr)->column('first_stage,first_stage_state,second_stage,second_stage_state,third_stage,third_stage_state', 'user_id'); - foreach ($userList as $item) { - $itmCustomerId = $customerRelationList[$item['user_id']] ?? 0; //当前用户关联的客服ID - $itmCustomerName = ""; - if ($itmCustomerId) { - $itmCustomerName = $customerNames[$itmCustomerId] ?? ""; //当前客服的名称 - } - - $rows[] = [ - 'id' => $item['user_id'], - 'user_no' => $item['user_no'], - 'nickname' => $item['nick_name'], - 'regTime' => $item['create_time'], - 'parentNo' => $parentNos[$item['parent_id']] ?? '-', - 'parent_id' => $item['parent_id'], - 'invite_code' => $item['invite_code'], - 'email' => $item['email'], - 'mobile' => $item['country_code'] . '-' . $item['phone_number'], - 'customer_remark' => $item['customer_remark'], - 'label' => $item['label'], - 'base_label' => $item['base_label'], - 'customer_id' => $itmCustomerId, - 'customer_name' => $itmCustomerName, - 'real_name_translation' => $realNameTranslation[$item['user_id']] ?? [], - - //余额 - 'digital' => $userDigitalList[$item['user_id']]['usable_num'] ?? '0', - 'stock' => $userStockList[$item['user_id']]['usable_num'] ?? '0', - 'contract' => $userContractList[$item['user_id']]['usable_num'] ?? '0', - 'contract_sec' => $userContractSecList[$item['user_id']]['usable_num'] ?? '0', - 'forex' => $userForexList[$item['user_id']]['usable_num'] ?? '0',//外汇 - 'stock_idn' => $userStockIdrList[$item['user_id']]['usable_num'] ?? '0', // 印尼股票余额 - 'stock_tha' => $userStockThaList[$item['user_id']]['usable_num'] ?? '0', // 泰股资产 - 'stock_mys' => $userStockMysList[$item['user_id']]['usable_num'] ?? '0', // 马股资产 - 'stock_in' => $userStockInList[$item['user_id']]['usable_num'] ?? '0', // 印度股资产 - 'stock_sgd' => $userStockSGDList[$item['user_id']]['usable_num'] ?? '0', // 新加坡股资产 - 'stock_fund' => $userStockFundList[$item['user_id']]['usable_num'] ?? '0', // 基金资产 - 'stock_option_in' => $userStockOptionInrList[$item['user_id']]['usable_num'] ?? '0', // 印度期权资产 - 'stock_hk' => $userStockHkList[$item['user_id']]['usable_num'] ?? '0', // 香港股资产 - 'stock_uk' => $userStockUkList[$item['user_id']]['usable_num'] ?? '0', // 英股资产 - 'stock_fur' => $userStockFurList[$item['user_id']]['usable_num'] ?? '0', // 法股资产 - 'stock_eur' => $userStockEurList[$item['user_id']]['usable_num'] ?? '0', // 德股资产 - 'stock_brl' => $userStockBrlList[$item['user_id']]['usable_num'] ?? '0', // 巴西股资产 - 'stock_jp' => $userStockJpList[$item['user_id']]['usable_num'] ?? '0', // 巴西股资产 - - //冻结资金 - 'digital_frozen' => $userDigitalList[$item['user_id']]['frozen_num'] ?? '0', - 'stock_frozen' => $userStockList[$item['user_id']]['frozen_num'] ?? '0', - 'contract_frozen' => $userContractList[$item['user_id']]['frozen_num'] ?? '0', - 'forex_frozen' => $userForexList[$item['user_id']]['frozen_num'] ?? '0', - 'contract_sec_frozen' => $userContractSecList[$item['user_id']]['frozen_num'] ?? '0', - 'stock_idn_frozen' => $userStockIdrList[$item['user_id']]['frozen_num'] ?? '0', // 印尼股票余额 - 'stock_tha_frozen' => $userStockThaList[$item['user_id']]['frozen_num'] ?? '0', // 泰股资产 - 'stock_mys_frozen' => $userStockMysList[$item['user_id']]['frozen_num'] ?? '0', // 马股资产 - 'stock_in_frozen' => $userStockInList[$item['user_id']]['frozen_num'] ?? '0', // 印度股资产 - 'stock_sgd_frozen' => $userStockSGDList[$item['user_id']]['frozen_num'] ?? '0', // 新加坡股资产 - 'stock_fund_frozen' => $userStockFundList[$item['user_id']]['frozen_num'] ?? '0', // 基金资产 - 'stock_option_in_frozen' => $userStockOptionInrList[$item['user_id']]['frozen_num'] ?? '0', // 印度期权资产 - 'stock_hk_frozen' => $userStockHkList[$item['user_id']]['frozen_num'] ?? '0', // 香港股资产 - 'stock_uk_frozen' => $userStockUkList[$item['user_id']]['frozen_num'] ?? '0', // 英港股资产 - 'stock_fur_frozen' => $userStockFurList[$item['user_id']]['frozen_num'] ?? '0', // 法股资产 - 'stock_eur_frozen' => $userStockEurList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 - 'stock_brl_frozen' => $userStockBrlList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 - 'stock_jp_frozen' => $userStockJpList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 + //最近登录IP、最近登录国家 + $subQuery = UserLoginLog::field('user_id,MAX(login_date) AS last_login_date') + ->where('user_id', 'in', $userIdArr)->group('user_id')->buildSql(); + $lastLoginLog = UserLoginLog::alias('a')->field('a.id') + ->join([$subQuery => 'w'], 'a.user_id=w.user_id AND a.login_date=w.last_login_date')->column(['id', 'ip', 'country', 'city'], 'a.user_id'); - 'rechargeAmount' => 0, - 'withdrawalAmount' => 0, - 'regIp' => $item['reg_ip'], - 'status' => $item['status'], - 'statusName' => UserModel::$statusMap[$item['status']] ?? '-', - 'loginTime' => $item['last_login_time'], - 'is_real' => $item['is_real'], - 'real_status' => $item['real_status'], - 'lever_status' => $item['lever_status'], - 'is_test_user' => $item['is_test_user'], - 'is_test_user_text' => UserModel::$isTestUserMap[$item['is_test_user']] ?? '-', - 'last_ip' => $lastLoginLog[$item['user_id']]['ip'] ?? '-', - 'last_country' => empty($lastLoginLog[$item['user_id']]['country']) ? '-' : json_decode($lastLoginLog[$item['user_id']]['country'], true)['en'], - 'agent_id' => $item['agent_id'], - 'agent_name' => $item['agent_id'] > 0 ? $agentNameArr[$item['agent_id']] ?? '-' : '-', - ]; + foreach ($userList as $item) { + $itmCustomerId = $customerRelationList[$item['user_id']] ?? 0; //当前用户关联的客服ID + $itmCustomerName = ""; + if ($itmCustomerId) { + $itmCustomerName = $customerNames[$itmCustomerId] ?? ""; //当前客服的名称 } + + $rows[] = [ + 'id' => $item['user_id'], + 'user_no' => $item['user_no'], + 'nickname' => $item['nick_name'], + 'regTime' => $item['create_time'], + 'parentNo' => $parentNos[$item['parent_id']] ?? '-', + 'parent_id' => $item['parent_id'], + 'invite_code' => $item['invite_code'], + 'email' => $item['email'], + 'mobile' => $item['country_code'] . '-' . $item['phone_number'], + 'customer_remark' => $item['customer_remark'], + 'label' => $item['label'], + 'base_label' => $item['base_label'], + 'customer_id' => $itmCustomerId, + 'customer_name' => $itmCustomerName, + 'real_name_translation' => $realNameTranslation[$item['user_id']] ?? [], + 'frozen_recharge' => $accountFrozenList[$item['user_id']]['frozen_recharge'] ?? 0, + 'frozen_withdraw' => $accountFrozenList[$item['user_id']]['frozen_withdraw'] ?? 0, + 'first_stage' => $userStageStateList[$item['user_id']]['first_stage'] ?? '', + 'first_stage_state' => $userStageStateList[$item['user_id']]['first_stage_state'] ?? 0, + 'second_stage' => $userStageStateList[$item['user_id']]['second_stage'] ?? '', + 'second_stage_state' => $userStageStateList[$item['user_id']]['second_stage_state'] ?? 0, + 'third_stage' => $userStageStateList[$item['user_id']]['third_stage'] ?? '', + 'third_stage_state' => $userStageStateList[$item['user_id']]['third_stage_state'] ?? 0, + + //余额 + 'digital' => $userDigitalList[$item['user_id']]['usable_num'] ?? '0', + 'stock' => $userStockList[$item['user_id']]['usable_num'] ?? '0', + 'contract' => $userContractList[$item['user_id']]['usable_num'] ?? '0', + 'contract_sec' => $userContractSecList[$item['user_id']]['usable_num'] ?? '0', + 'forex' => $userForexList[$item['user_id']]['usable_num'] ?? '0',//外汇 + 'stock_idn' => $userStockIdrList[$item['user_id']]['usable_num'] ?? '0', // 印尼股票余额 + 'stock_tha' => $userStockThaList[$item['user_id']]['usable_num'] ?? '0', // 泰股资产 + 'stock_mys' => $userStockMysList[$item['user_id']]['usable_num'] ?? '0', // 马股资产 + 'stock_in' => $userStockInList[$item['user_id']]['usable_num'] ?? '0', // 印度股资产 + 'stock_sgd' => $userStockSGDList[$item['user_id']]['usable_num'] ?? '0', // 新加坡股资产 + 'stock_fund' => $userStockFundList[$item['user_id']]['usable_num'] ?? '0', // 基金资产 + 'stock_option_in' => $userStockOptionInrList[$item['user_id']]['usable_num'] ?? '0', // 印度期权资产 + 'stock_hk' => $userStockHkList[$item['user_id']]['usable_num'] ?? '0', // 香港股资产 + 'stock_uk' => $userStockUkList[$item['user_id']]['usable_num'] ?? '0', // 英股资产 + 'stock_fur' => $userStockFurList[$item['user_id']]['usable_num'] ?? '0', // 法股资产 + 'stock_eur' => $userStockEurList[$item['user_id']]['usable_num'] ?? '0', // 德股资产 + 'stock_brl' => $userStockBrlList[$item['user_id']]['usable_num'] ?? '0', // 巴西股资产 + 'stock_jp' => $userStockJpList[$item['user_id']]['usable_num'] ?? '0', // 巴西股资产 + + //冻结资金 + 'digital_frozen' => $userDigitalList[$item['user_id']]['frozen_num'] ?? '0', + 'stock_frozen' => $userStockList[$item['user_id']]['frozen_num'] ?? '0', + 'contract_frozen' => $userContractList[$item['user_id']]['frozen_num'] ?? '0', + 'forex_frozen' => $userForexList[$item['user_id']]['frozen_num'] ?? '0', + 'contract_sec_frozen' => $userContractSecList[$item['user_id']]['frozen_num'] ?? '0', + 'stock_idn_frozen' => $userStockIdrList[$item['user_id']]['frozen_num'] ?? '0', // 印尼股票余额 + 'stock_tha_frozen' => $userStockThaList[$item['user_id']]['frozen_num'] ?? '0', // 泰股资产 + 'stock_mys_frozen' => $userStockMysList[$item['user_id']]['frozen_num'] ?? '0', // 马股资产 + 'stock_in_frozen' => $userStockInList[$item['user_id']]['frozen_num'] ?? '0', // 印度股资产 + 'stock_sgd_frozen' => $userStockSGDList[$item['user_id']]['frozen_num'] ?? '0', // 新加坡股资产 + 'stock_fund_frozen' => $userStockFundList[$item['user_id']]['frozen_num'] ?? '0', // 基金资产 + 'stock_option_in_frozen' => $userStockOptionInrList[$item['user_id']]['frozen_num'] ?? '0', // 印度期权资产 + 'stock_hk_frozen' => $userStockHkList[$item['user_id']]['frozen_num'] ?? '0', // 香港股资产 + 'stock_uk_frozen' => $userStockUkList[$item['user_id']]['frozen_num'] ?? '0', // 英港股资产 + 'stock_fur_frozen' => $userStockFurList[$item['user_id']]['frozen_num'] ?? '0', // 法股资产 + 'stock_eur_frozen' => $userStockEurList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 + 'stock_brl_frozen' => $userStockBrlList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 + 'stock_jp_frozen' => $userStockJpList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 + + 'rechargeAmount' => 0, + 'withdrawalAmount' => 0, + 'regIp' => $item['reg_ip'], + 'status' => $item['status'], + 'statusName' => UserModel::$statusMap[$item['status']] ?? '-', + 'loginTime' => $item['last_login_time'], + 'is_real' => $item['is_real'], + 'real_status' => $item['real_status'], + 'lever_status' => $item['lever_status'], + 'is_test_user' => $item['is_test_user'], + 'is_test_user_text' => UserModel::$isTestUserMap[$item['is_test_user']] ?? '-', + 'last_ip' => $lastLoginLog[$item['user_id']]['ip'] ?? '-', + 'last_country' => empty($lastLoginLog[$item['user_id']]['country']) ? '-' : json_decode($lastLoginLog[$item['user_id']]['country'], true)['en'], + 'agent_id' => $item['agent_id'], + 'agent_name' => $item['agent_id'] > 0 ? $agentNameArr[$item['agent_id']] ?? '-' : '-', + ]; } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extent' => ['market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'is_agent' => $IsAgent, 'agent_list' => $agentNameArr, 'market_rate' => $marketRate, 'market_tape_list' => $tapeList]]); @@ -1166,6 +1183,51 @@ class UserService extends AdminBaseService return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); } } + + // 编辑用户阶段信息 + public function editUserStage($param) + { + try { + if (empty($param['user_id'])) { + return $this->toData('400', '缺少参数'); + } + // 检测用户数据 + $user = UserModel::where('user_id', $param['user_id'])->findOrEmpty()->toArray(); + if (empty($user)) { + return $this->toData('1', '用户不存在'); + } + // 检测用户阶段数据 + $userStageState = UserStageStateModel::where(['user_id'=>$user['user_id']])->find(); + if (empty($userStageState)) { + UserStageStateModel::create([ + 'user_id' => $user['user_id'], + 'first_stage' => $param['first_stage'] ?? '', + 'first_stage_state' => $param['first_stage_state'] ?? 0, + 'second_stage' => $param['second_stage'] ?? '', + 'second_stage_state' => $param['second_stage_state'] ?? 0, + 'third_stage' => $param['third_stage'] ?? '', + 'third_stage_state' => $param['third_stage_state'] ?? 0, + ]); + } else { + if (isset($param['first_stage'])) { + $userStageState->first_stage = $param['first_stage']; + $userStageState->first_stage_state = $param['first_stage_state'] ?? 0; + } + if (isset($param['second_stage'])) { + $userStageState->second_stage = $param['second_stage']; + $userStageState->second_stage_state = $param['second_stage_state'] ?? 0; + } + if (isset($param['third_stage'])) { + $userStageState->third_stage = $param['third_stage']; + $userStageState->third_stage_state = $param['third_stage_state'] ?? 0; + } + $userStageState->save(); + } + return $this->toData('0', 'SUCCESS'); + } catch (\Exception $exception) { + return $this->toData('500', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); + } + } } diff --git a/app/admin/validate/RechargeValidate.php b/app/admin/validate/RechargeValidate.php index 17962ea1..d8e3277e 100644 --- a/app/admin/validate/RechargeValidate.php +++ b/app/admin/validate/RechargeValidate.php @@ -37,7 +37,7 @@ class RechargeValidate extends AdminBaseValidate protected $scene = [ // 现货 - 'index' => ['page','limit','order_id', 'user_no', 'start_time', 'end_time','is_online'], + 'index' => ['page','limit','order_id', 'user_no', 'start_time', 'end_time'], 'info' => ['id'], 'check' => ['id','check_status'], ]; diff --git a/app/admin/validate/UserValidate.php b/app/admin/validate/UserValidate.php index 52150395..41020ab4 100644 --- a/app/admin/validate/UserValidate.php +++ b/app/admin/validate/UserValidate.php @@ -18,6 +18,8 @@ class UserValidate extends AdminBaseValidate 'password'=>'require', 'id' =>'require|integer', 'is_test_user' => 'require|in:1,2', + 'frozen_recharge' => 'in:1,0', + 'frozen_withdraw' => 'in:1,0', ]; protected $message = [ @@ -51,5 +53,6 @@ class UserValidate extends AdminBaseValidate 'relation' => ['page','limit','user_no'], 'add_phone' =>['nation','phone','password'], 'add_email' =>['email','password'], + 'frozen_state' => ['id','frozen_recharge','frozen_withdraw'], ]; } \ No newline at end of file diff --git a/app/model/UserStageStateModel.php b/app/model/UserStageStateModel.php new file mode 100644 index 00000000..006e7c90 --- /dev/null +++ b/app/model/UserStageStateModel.php @@ -0,0 +1,18 @@ +