diff --git a/app/admin/controller/Admin.php b/app/admin/controller/Admin.php index 6aeb696d..a95a0823 100644 --- a/app/admin/controller/Admin.php +++ b/app/admin/controller/Admin.php @@ -1,4 +1,5 @@ updateInfo($this->request->user_id,$this->request->param()); + $result = $service->updateInfo($this->request->user_id, $this->request->param()); return json($result); } public function getUserInfo() @@ -38,7 +39,7 @@ class Admin extends AdminBaseController public function updatePassword() { $service = new AdminService(); - $result = $service->updatePassword($this->request->user_id,$this->request->param()); + $result = $service->updatePassword($this->request->user_id, $this->request->param()); return json($result); } @@ -49,24 +50,28 @@ class Admin extends AdminBaseController return json($returnData); } //编辑账号 - public function updateAccount(){ - $returnData = (new AdminService())->updateAccount($this->request->param('id'),$this->request->param()); + public function updateAccount() + { + $returnData = (new AdminService())->updateAccount($this->request->param('id'), $this->request->param()); return json($returnData); } //更新账号状态 - public function updateAccountStauts(){ - $returnData = (new AdminService())->updateAccountStauts($this->request->param('id'),$this->request->param()); + public function updateAccountStauts() + { + $returnData = (new AdminService())->updateAccountStauts($this->request->param('id'), $this->request->param()); return json($returnData); } //删除指定用户 - public function del(){ + public function del() + { $returnData = (new AdminService())->del($this->request->param('id')); return json($returnData); } //获取用户权限代码 - public function getPermCode(){ + public function getPermCode() + { $returnData = (new AdminService())->getPermCode($this->request->user_id); return json($returnData); } @@ -85,7 +90,8 @@ class Admin extends AdminBaseController return json($returnData); } - public function inviteCode(){ + public function inviteCode() + { $returnData = (new AdminService())->inviteCode(); return json($returnData); } @@ -133,11 +139,25 @@ class Admin extends AdminBaseController $returnData = (new AdminService())->getUserAccessLog($this->request->user_id, $this->request->param()); return json($returnData); } - + public function getUserAccessLogSummary() + { + $returnData = (new AdminService())->getUserAccessLogSummary($this->request->user_id, $this->request->param()); + return json($returnData); + } + public function getVisitorAccessLog() + { + $returnData = (new AdminService())->getVisitorAccessLog($this->request->user_id, $this->request->param()); + return json($returnData); + } + public function getVisitorAccessLogSummary() + { + $returnData = (new AdminService())->getVisitorAccessLogSummary($this->request->user_id, $this->request->param()); + return json($returnData); + } // 获取admin的操作记录 public function getAdminOperationLog() { - $returnData = (new AdminService())->getAdminOperationLog($this->request->user_id,$this->request->param()); + $returnData = (new AdminService())->getAdminOperationLog($this->request->user_id, $this->request->param()); return json($returnData); } @@ -155,6 +175,20 @@ class Admin extends AdminBaseController return json($returnData); } + // 生成vip兑换码 + public function generateVipCode() + { + $returnData = (new AdminService())->generateVipCode($this->request->param()); + return json($returnData); + } + + // 获取vip兑换码列表 + public function getVipCode() + { + $returnData = (new AdminService())->getVipCode($this->request->param()); + return json($returnData); + } + // 单次发送邮件或短信消息 public function sendEmailOrSms() { diff --git a/app/admin/controller/Index.php b/app/admin/controller/Index.php index 3d3ae01f..03b15cc4 100644 --- a/app/admin/controller/Index.php +++ b/app/admin/controller/Index.php @@ -35,6 +35,7 @@ use app\model\StockSgdListModel; use app\model\StockThaListModel; use app\model\StockThaTradeModel; use app\model\StockTradeModel; +use app\model\UserAccessLogModel; use app\model\UserModel; use app\model\UserVerifyLogModel; use app\model\UserWithdrawalModel; @@ -70,7 +71,7 @@ class Index extends AdminBaseController return json(['code' => '500', 'message' => '当前账号数据为空', 'data' => []]); } // 查询当前账号的角色信息 - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return json(['code' => '500', 'message' => '当前账号分配的角色数据为空', 'data' => []]); } @@ -85,10 +86,10 @@ class Index extends AdminBaseController $todayRegisterNum = UserModel::whereTime('create_time', 'between', [$today, $tomorrow])->count(); // 总注册人数(用户的总数) $totalRegisterNum = UserModel::count(); -// // 今日充值用户 完成状态 -// $todayRechargeNum = RechargeApplyModel::where('status', 1)->whereTime('create_time', 'between', [$today, $tomorrow])->group('user_id')->count(); + // // 今日充值用户 完成状态 + // $todayRechargeNum = RechargeApplyModel::where('status', 1)->whereTime('create_time', 'between', [$today, $tomorrow])->group('user_id')->count(); // 总充值用户(充值用户的个数 以用户id分组) -// $totalRechargeNum = RechargeApplyModel::where('status', 1)->group('user_id')->count(); + // $totalRechargeNum = RechargeApplyModel::where('status', 1)->group('user_id')->count(); break; case AuthRoleModel::NAME_AGENT: // 代理 - 查看代理下可以查看的用户 // 今日注册用户 @@ -198,8 +199,6 @@ class Index extends AdminBaseController $todayRechargeAmount = Db::table($rechargeApplyTableName) ->whereTime('create_time', 'between', [$today, $tomorrow])->where($whereInUser) ->where('status', 1)->sum('recharge_num'); - $todayRechargeAmountGroup = Db::table($rechargeApplyTableName)->whereTime('create_time', 'between', [$today, $tomorrow])->where($whereInUser) - ->where('status', 1)->field('account_type, SUM(recharge_num) AS recharge_num')->group('recharge_num')->select(); // 今日提款金额 完成状态 $todayWithdrawAmount = Db::table($userWithdrawTableName) @@ -215,22 +214,29 @@ class Index extends AdminBaseController $approvedRealName = UserVerifyLogModel::where('status', 2)->where($whereInUser)->count(); // 审核通过实名认证用户数 $failedRealName = UserVerifyLogModel::where('status', 3)->where($whereInUser)->count(); // 审核失败实名认证用户数 + $todayIpVisit = UserAccessLogModel::where('user_id', null) + ->whereTime('created_at', 'today') + ->group('ip') + ->count(); // 今日IP访问统计 + $totalIpVisit = UserAccessLogModel::where('user_id', null) + ->group('ip') + ->count(); // 总IP访问统计 + $data = [ 'todayRegisterNum' => $todayRegisterNum, // 今日注册用户 'totalRegisterNum' => $totalRegisterNum, // 总注册人数 'todayRechargeNum' => $todayRechargeNum, // 今日充值用户 - 'totalRechargeNum' => $totalRechargeNum,// 总充值用户 + 'totalRechargeNum' => $totalRechargeNum, // 总充值用户 'todayTradeNum' => $todayTradeNum, // 今日交易用户 - 'totalTradeNum' => $totalTradeNum,// 总交易用户 + 'totalTradeNum' => $totalTradeNum, // 总交易用户 'todayWithdrawNum' => $todayWithdrawNum, // 今日提款用户 - 'totalWithdrawalNum' => $totalWithdrawalNum,// 总提现用户 + 'totalWithdrawalNum' => $totalWithdrawalNum, // 总提现用户 'todayRechargeAmount' => $todayRechargeAmount, // 今日充值金额 - 'todayRechargeAmountGroup' => $todayRechargeAmountGroup, // 今日充值金额 - 按充值类型分组统计 - 'totalRechargeAmount' => $totalRechargeAmount,// 总充值金额 + 'totalRechargeAmount' => $totalRechargeAmount, // 总充值金额 'todayWithdrawAmount' => $todayWithdrawAmount, // 今日提款金额 'totalWithdrawAmount' => $totalWithdrawAmount, // 总提款金额 @@ -241,6 +247,10 @@ class Index extends AdminBaseController 'awaiting_real_name' => $awaitingRealName, // 等待实名审核用户数 'approved_real_name' => $approvedRealName, // 实名审核通过用户数 'failed_real_name' => $failedRealName, // 实名审核失败用户数 + + //ip游客访问统计 + 'todayIpVisit' => $todayIpVisit, // 今日IP访问统计 + 'totalIpVisit' => $totalIpVisit, // 总IP访问统计 ]; return json(['code' => '0', 'message' => 'SUCCESS', 'data' => $data]); @@ -265,7 +275,7 @@ class Index extends AdminBaseController return json(['code' => '500', 'message' => '当前账号数据为空', 'data' => []]); } // 查询当前账号的角色信息 - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return json(['code' => '500', 'message' => '当前账号分配的角色数据为空', 'data' => []]); } @@ -340,24 +350,24 @@ class Index extends AdminBaseController return json(['code' => '500', 'message' => '当前账号数据为空', 'data' => []]); } // 查询当前账号的角色信息 - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return json(['code' => '500', 'message' => '当前账号分配的角色数据为空', 'data' => []]); } switch ($role->name) { case AuthRoleModel::NAME_ADMIN: // 超级管理员可以查看所有数据 -// $query1 = 'select "合约" as subject, trade_id,order_id,user_id,null as stock_id,contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_contract_trade'; -// $query2 = 'select "数字币" as subject, trade_id,order_id,user_id,null as stock_id,null as contract_id,digital_id,trade_type,deal_type,status,order_money,create_time from bot_digital_trade'; -// $query3 = 'select "美股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_trade'; -// $query4 = 'select "马股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_mys_trade'; -// $query5 = 'select "泰股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_tha_trade'; -// $query6 = 'select "印尼股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_idn_trade'; -// $query7 = 'select "印度股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_in_trade'; -// $unionAllQuery = $query1.' union all '. $query2. ' union all '. $query3. ' union all '. $query4. ' union all '. $query5. ' union all '. $query6. ' union all '. $query7; -// $totalQuery = 'select count(*) as total from ( '. $unionAllQuery. ' ) as tmp;'; -// $total = Db::query($totalQuery); -// $list = Db::query($unionAllQuery. ' order by create_time desc limit ?, ?;', [$offset, $param['limit']]); + // $query1 = 'select "合约" as subject, trade_id,order_id,user_id,null as stock_id,contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_contract_trade'; + // $query2 = 'select "数字币" as subject, trade_id,order_id,user_id,null as stock_id,null as contract_id,digital_id,trade_type,deal_type,status,order_money,create_time from bot_digital_trade'; + // $query3 = 'select "美股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_trade'; + // $query4 = 'select "马股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_mys_trade'; + // $query5 = 'select "泰股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_tha_trade'; + // $query6 = 'select "印尼股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_idn_trade'; + // $query7 = 'select "印度股" as subject, trade_id,order_id,user_id,stock_id,null as contract_id,null as digital_id,trade_type,deal_type,status,order_money,create_time from bot_stock_in_trade'; + // $unionAllQuery = $query1.' union all '. $query2. ' union all '. $query3. ' union all '. $query4. ' union all '. $query5. ' union all '. $query6. ' union all '. $query7; + // $totalQuery = 'select count(*) as total from ( '. $unionAllQuery. ' ) as tmp;'; + // $total = Db::query($totalQuery); + // $list = Db::query($unionAllQuery. ' order by create_time desc limit ?, ?;', [$offset, $param['limit']]); $list = Db::table($tradeTables[$param['market_type']])->order('create_time', 'desc')->paginate([ 'list_rows' => $param['limit'], @@ -1084,7 +1094,8 @@ class Index extends AdminBaseController return json(['msg' => $exception->getMessage()]); } } - public function cacheForex(){ + public function cacheForex() + { $redis = (new AdminBaseService())->getRedis(); // 缓存外汇 $contractList = ForexListModel::where('status', '=', '1')->select(); @@ -1147,7 +1158,7 @@ class Index extends AdminBaseController * */ public function signStock() { - $market_list = [3, 4, 5, 6, 7, 9, 12, 14, 15, 16,17,18]; + $market_list = [3, 4, 5, 6, 7, 9, 12, 14, 15, 16, 17, 18]; foreach ($market_list as $market_type) { (new IPOService())->signStockIPO($market_type); } @@ -1261,8 +1272,6 @@ class Index extends AdminBaseController // 提交事务 Db::commit(); - - } return json($result); } @@ -1298,5 +1307,4 @@ class Index extends AdminBaseController return json([$exception->getMessage()]); } } - -} \ No newline at end of file +} diff --git a/app/admin/route/app.php b/app/admin/route/app.php index bf30b0e3..5e27f8fa 100644 --- a/app/admin/route/app.php +++ b/app/admin/route/app.php @@ -97,89 +97,89 @@ Route::group('/', function () { Route::post('/order/forex_clear', 'Order/forexClear'); // 股票-废弃 -// Route::post('/order/stock_hold', 'Order/stockHold'); -// Route::post('/order/stock_place', 'Order/stockPlace'); -// Route::post('/order/stock_back', 'Order/stockBack'); -// Route::post('/order/stock_clear', 'Order/stockClear'); + // Route::post('/order/stock_hold', 'Order/stockHold'); + // Route::post('/order/stock_place', 'Order/stockPlace'); + // Route::post('/order/stock_back', 'Order/stockBack'); + // Route::post('/order/stock_clear', 'Order/stockClear'); // 美股 - Route::post('/order/us_stock_hold', 'Order/StockHold')->append(['market_type' =>3]); - Route::post('/order/us_stock_place', 'Order/StockPlace')->append(['market_type' =>3]); - Route::post('/order/us_stock_back', 'Order/StockBack')->append(['market_type' =>3]); - Route::post('/order/us_stock_clear', 'Order/StockClear')->append(['market_type' =>3]); + Route::post('/order/us_stock_hold', 'Order/StockHold')->append(['market_type' => 3]); + Route::post('/order/us_stock_place', 'Order/StockPlace')->append(['market_type' => 3]); + Route::post('/order/us_stock_back', 'Order/StockBack')->append(['market_type' => 3]); + Route::post('/order/us_stock_clear', 'Order/StockClear')->append(['market_type' => 3]); // 印尼股票 - Route::post('/order/idn_stock_hold', 'Order/StockHold')->append(['market_type' =>4]); - Route::post('/order/idn_stock_place', 'Order/StockPlace')->append(['market_type' =>4]); - Route::post('/order/idn_stock_back', 'Order/StockBack')->append(['market_type' =>4]); - Route::post('/order/idn_stock_clear', 'Order/StockClear')->append(['market_type' =>4]); + Route::post('/order/idn_stock_hold', 'Order/StockHold')->append(['market_type' => 4]); + Route::post('/order/idn_stock_place', 'Order/StockPlace')->append(['market_type' => 4]); + Route::post('/order/idn_stock_back', 'Order/StockBack')->append(['market_type' => 4]); + Route::post('/order/idn_stock_clear', 'Order/StockClear')->append(['market_type' => 4]); // 马来西亚股票 - Route::post('/order/mys_stock_hold', 'Order/StockHold')->append(['market_type' =>5]); - Route::post('/order/mys_stock_place', 'Order/StockPlace')->append(['market_type' =>5]); - Route::post('/order/mys_stock_back', 'Order/StockBack')->append(['market_type' =>5]); - Route::post('/order/mys_stock_clear', 'Order/StockClear')->append(['market_type' =>5]); + Route::post('/order/mys_stock_hold', 'Order/StockHold')->append(['market_type' => 5]); + Route::post('/order/mys_stock_place', 'Order/StockPlace')->append(['market_type' => 5]); + Route::post('/order/mys_stock_back', 'Order/StockBack')->append(['market_type' => 5]); + Route::post('/order/mys_stock_clear', 'Order/StockClear')->append(['market_type' => 5]); // 泰国股票 - Route::post('/order/tha_stock_hold', 'Order/StockHold')->append(['market_type' =>6]); - Route::post('/order/tha_stock_place', 'Order/StockPlace')->append(['market_type' =>6]); - Route::post('/order/tha_stock_back', 'Order/StockBack')->append(['market_type' =>6]); - Route::post('/order/tha_stock_clear', 'Order/StockClear')->append(['market_type' =>6]); + Route::post('/order/tha_stock_hold', 'Order/StockHold')->append(['market_type' => 6]); + Route::post('/order/tha_stock_place', 'Order/StockPlace')->append(['market_type' => 6]); + Route::post('/order/tha_stock_back', 'Order/StockBack')->append(['market_type' => 6]); + Route::post('/order/tha_stock_clear', 'Order/StockClear')->append(['market_type' => 6]); // 印度股票订单 - Route::post('/order/in_stock_hold', 'Order/StockHold')->append(['market_type' =>7]); // 印度股票持仓 - Route::post('/order/in_stock_place', 'Order/stockPlace')->append(['market_type' =>7]); // 印度股票挂单 - Route::post('/order/in_stock_back', 'Order/stockBack')->append(['market_type' =>7]); // 印度股票撤单 - Route::post('/order/in_stock_clear', 'Order/stockClear')->append(['market_type' =>7]); // 印度股票平仓 + Route::post('/order/in_stock_hold', 'Order/StockHold')->append(['market_type' => 7]); // 印度股票持仓 + Route::post('/order/in_stock_place', 'Order/stockPlace')->append(['market_type' => 7]); // 印度股票挂单 + Route::post('/order/in_stock_back', 'Order/stockBack')->append(['market_type' => 7]); // 印度股票撤单 + Route::post('/order/in_stock_clear', 'Order/stockClear')->append(['market_type' => 7]); // 印度股票平仓 // 新加坡股票 - Route::post('/order/sgd_stock_hold', 'Order/StockHold')->append(['market_type' =>9]); - Route::post('/order/sgd_stock_place', 'Order/stockPlace')->append(['market_type' =>9]); - Route::post('/order/sgd_stock_back', 'Order/stockBack')->append(['market_type' =>9]); - Route::post('/order/sgd_stock_clear', 'Order/stockClear')->append(['market_type' =>9]); + Route::post('/order/sgd_stock_hold', 'Order/StockHold')->append(['market_type' => 9]); + Route::post('/order/sgd_stock_place', 'Order/stockPlace')->append(['market_type' => 9]); + Route::post('/order/sgd_stock_back', 'Order/stockBack')->append(['market_type' => 9]); + Route::post('/order/sgd_stock_clear', 'Order/stockClear')->append(['market_type' => 9]); // 香港股票 - Route::post('/order/hk_stock_hold', 'Order/StockHold')->append(['market_type' =>12]); - Route::post('/order/hk_stock_place', 'Order/stockPlace')->append(['market_type' =>12]); - Route::post('/order/hk_stock_back', 'Order/stockBack')->append(['market_type' =>12]); - Route::post('/order/hk_stock_clear', 'Order/stockClear')->append(['market_type' =>12]); + Route::post('/order/hk_stock_hold', 'Order/StockHold')->append(['market_type' => 12]); + Route::post('/order/hk_stock_place', 'Order/stockPlace')->append(['market_type' => 12]); + Route::post('/order/hk_stock_back', 'Order/stockBack')->append(['market_type' => 12]); + Route::post('/order/hk_stock_clear', 'Order/stockClear')->append(['market_type' => 12]); // 英国股票 - Route::post('/order/uk_stock_hold', 'Order/StockHold')->append(['market_type' =>14]); // 股票持仓 - Route::post('/order/uk_stock_place', 'Order/StockPlace')->append(['market_type' =>14]); // 股票挂单 - Route::post('/order/uk_stock_back', 'Order/StockBack')->append(['market_type' =>14]); // 股票撤单 - Route::post('/order/uk_stock_clear', 'Order/StockClear')->append(['market_type' =>14]); // 股票平仓 + Route::post('/order/uk_stock_hold', 'Order/StockHold')->append(['market_type' => 14]); // 股票持仓 + Route::post('/order/uk_stock_place', 'Order/StockPlace')->append(['market_type' => 14]); // 股票挂单 + Route::post('/order/uk_stock_back', 'Order/StockBack')->append(['market_type' => 14]); // 股票撤单 + Route::post('/order/uk_stock_clear', 'Order/StockClear')->append(['market_type' => 14]); // 股票平仓 // 法国股票 - Route::post('/order/fur_stock_hold', 'Order/StockHold')->append(['market_type' =>15]); // 股票持仓 - Route::post('/order/fur_stock_place', 'Order/StockPlace')->append(['market_type' =>15]); // 股票挂单 - Route::post('/order/fur_stock_back', 'Order/StockBack')->append(['market_type' =>15]); // 股票撤单 - Route::post('/order/fur_stock_clear', 'Order/StockClear')->append(['market_type' =>15]); // 股票平仓 + Route::post('/order/fur_stock_hold', 'Order/StockHold')->append(['market_type' => 15]); // 股票持仓 + Route::post('/order/fur_stock_place', 'Order/StockPlace')->append(['market_type' => 15]); // 股票挂单 + Route::post('/order/fur_stock_back', 'Order/StockBack')->append(['market_type' => 15]); // 股票撤单 + Route::post('/order/fur_stock_clear', 'Order/StockClear')->append(['market_type' => 15]); // 股票平仓 // 德国股票 - Route::post('/order/eur_stock_hold', 'Order/StockHold')->append(['market_type' =>16]); // 股票持仓 - Route::post('/order/eur_stock_place', 'Order/StockPlace')->append(['market_type' =>16]); // 股票挂单 - Route::post('/order/eur_stock_back', 'Order/StockBack')->append(['market_type' =>16]); // 股票撤单 - Route::post('/order/eur_stock_clear', 'Order/StockClear')->append(['market_type' =>16]); // 股票平仓 + Route::post('/order/eur_stock_hold', 'Order/StockHold')->append(['market_type' => 16]); // 股票持仓 + Route::post('/order/eur_stock_place', 'Order/StockPlace')->append(['market_type' => 16]); // 股票挂单 + Route::post('/order/eur_stock_back', 'Order/StockBack')->append(['market_type' => 16]); // 股票撤单 + Route::post('/order/eur_stock_clear', 'Order/StockClear')->append(['market_type' => 16]); // 股票平仓 // 巴西股票 - Route::post('/order/eur_stock_hold', 'Order/StockHold')->append(['market_type' =>17]); // 股票持仓 - Route::post('/order/eur_stock_place', 'Order/StockPlace')->append(['market_type' =>17]); // 股票挂单 - Route::post('/order/eur_stock_back', 'Order/StockBack')->append(['market_type' =>17]); // 股票撤单 - Route::post('/order/eur_stock_clear', 'Order/StockClear')->append(['market_type' =>17]); // 股票平仓 + Route::post('/order/eur_stock_hold', 'Order/StockHold')->append(['market_type' => 17]); // 股票持仓 + Route::post('/order/eur_stock_place', 'Order/StockPlace')->append(['market_type' => 17]); // 股票挂单 + Route::post('/order/eur_stock_back', 'Order/StockBack')->append(['market_type' => 17]); // 股票撤单 + Route::post('/order/eur_stock_clear', 'Order/StockClear')->append(['market_type' => 17]); // 股票平仓 // 巴西股票 - Route::post('/order/jp_stock_hold', 'Order/StockHold')->append(['market_type' =>18]); // 股票持仓 - Route::post('/order/jp_stock_place', 'Order/StockPlace')->append(['market_type' =>18]); // 股票挂单 - Route::post('/order/jp_stock_back', 'Order/StockBack')->append(['market_type' =>18]); // 股票撤单 - Route::post('/order/jp_stock_clear', 'Order/StockClear')->append(['market_type' =>18]); // 股票平仓 + Route::post('/order/jp_stock_hold', 'Order/StockHold')->append(['market_type' => 18]); // 股票持仓 + Route::post('/order/jp_stock_place', 'Order/StockPlace')->append(['market_type' => 18]); // 股票挂单 + Route::post('/order/jp_stock_back', 'Order/StockBack')->append(['market_type' => 18]); // 股票撤单 + Route::post('/order/jp_stock_clear', 'Order/StockClear')->append(['market_type' => 18]); // 股票平仓 // 印度股指订单 - Route::post('order/inr_stock_index_hold', 'Order/StockHold')->append(['market_type' =>20]); // 印度股指持仓 - Route::post('order/inr_stock_index_place', 'Order/stockPlace')->append(['market_type' =>20]); // 印度股指挂单 - Route::post('order/inr_stock_index_back', 'Order/stockBack')->append(['market_type' =>20]); // 印度股指撤单 - Route::post('order/inr_stock_index_clear', 'Order/stockClear')->append(['market_type' =>20]); // 印度股指平仓 + Route::post('order/inr_stock_index_hold', 'Order/StockHold')->append(['market_type' => 20]); // 印度股指持仓 + Route::post('order/inr_stock_index_place', 'Order/stockPlace')->append(['market_type' => 20]); // 印度股指挂单 + Route::post('order/inr_stock_index_back', 'Order/stockBack')->append(['market_type' => 20]); // 印度股指撤单 + Route::post('order/inr_stock_index_clear', 'Order/stockClear')->append(['market_type' => 20]); // 印度股指平仓 // 黄金期货订单 - Route::post('order/gold_futures_hold', 'Order/StockHold')->append(['market_type' =>21]); // 黄金期货持仓 - Route::post('order/gold_futures_place', 'Order/stockPlace')->append(['market_type' =>21]); // 黄金期货挂单 - Route::post('order/gold_futures_back', 'Order/stockBack')->append(['market_type' =>21]); // 黄金期货撤单 - Route::post('order/gold_futures_clear', 'Order/stockClear')->append(['market_type' =>21]); // 黄金期货平仓 + Route::post('order/gold_futures_hold', 'Order/StockHold')->append(['market_type' => 21]); // 黄金期货持仓 + Route::post('order/gold_futures_place', 'Order/stockPlace')->append(['market_type' => 21]); // 黄金期货挂单 + Route::post('order/gold_futures_back', 'Order/stockBack')->append(['market_type' => 21]); // 黄金期货撤单 + Route::post('order/gold_futures_clear', 'Order/stockClear')->append(['market_type' => 21]); // 黄金期货平仓 // 印度期权 Route::post('/order/in_option_hold', 'Order/inOptionHold'); // 股票持仓 @@ -247,6 +247,8 @@ Route::group('/', function () { // 送会员 Route::post('admin/give_vip', 'Admin/giveVip')->middleware('admin_log'); //赠送用户vip Route::post('admin/buy_vip_log', 'Admin/buyVipLog')->middleware('admin_log'); //用户购买VIP记录 + Route::post('admin/generate_vip_code', 'Admin/generateVipCode')->middleware('admin_log'); //生成vip兑换码 + Route::post('admin/get_vip_code', 'Admin/getVipCode')->middleware('admin_log'); //获取vip兑换码列表 // 配置管理 // 外汇插针行情 @@ -309,65 +311,65 @@ Route::group('/', function () { Route::post('/setting/digital_select', 'setting.Digital/getTradeNameList'); // 美股股票配置 - Route::post('/setting/us_stock_index', 'setting.Stock/index')->append(['market_type' =>3]); - Route::post('/setting/us_stock_add', 'setting.Stock/add')->append(['market_type' =>3])->middleware('admin_log'); - Route::post('/setting/us_stock_edit', 'setting.Stock/edit')->append(['market_type' =>3])->middleware('admin_log'); - Route::post('/setting/us_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>3]); + Route::post('/setting/us_stock_index', 'setting.Stock/index')->append(['market_type' => 3]); + Route::post('/setting/us_stock_add', 'setting.Stock/add')->append(['market_type' => 3])->middleware('admin_log'); + Route::post('/setting/us_stock_edit', 'setting.Stock/edit')->append(['market_type' => 3])->middleware('admin_log'); + Route::post('/setting/us_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 3]); // 印尼股票配置 - Route::post('/setting/idn_stock_index', 'setting.Stock/index')->append(['market_type' =>4]); - Route::post('/setting/idn_stock_add', 'setting.Stock/add')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/idn_stock_edit', 'setting.Stock/edit')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/idn_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>4]); + Route::post('/setting/idn_stock_index', 'setting.Stock/index')->append(['market_type' => 4]); + Route::post('/setting/idn_stock_add', 'setting.Stock/add')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/idn_stock_edit', 'setting.Stock/edit')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/idn_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 4]); // 马股股票配置 - Route::post('/setting/mys_stock_index', 'setting.Stock/index')->append(['market_type' =>5]); - Route::post('/setting/mys_stock_add', 'setting.Stock/add')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/mys_stock_edit', 'setting.Stock/edit')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/mys_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>5]); + Route::post('/setting/mys_stock_index', 'setting.Stock/index')->append(['market_type' => 5]); + Route::post('/setting/mys_stock_add', 'setting.Stock/add')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/mys_stock_edit', 'setting.Stock/edit')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/mys_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 5]); // 泰股股票配置 - Route::post('/setting/tha_stock_index', 'setting.Stock/index')->append(['market_type' =>6]); - Route::post('/setting/tha_stock_add', 'setting.Stock/add')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/tha_stock_edit', 'setting.Stock/edit')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/tha_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>6]); + Route::post('/setting/tha_stock_index', 'setting.Stock/index')->append(['market_type' => 6]); + Route::post('/setting/tha_stock_add', 'setting.Stock/add')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/tha_stock_edit', 'setting.Stock/edit')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/tha_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 6]); // 印度股票配置 - Route::post('/setting/in_stock_index', 'setting.Stock/index')->append(['market_type' =>7]); - Route::post('/setting/in_stock_add', 'setting.Stock/add')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/in_stock_edit', 'setting.Stock/edit')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/in_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>7]); + Route::post('/setting/in_stock_index', 'setting.Stock/index')->append(['market_type' => 7]); + Route::post('/setting/in_stock_add', 'setting.Stock/add')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/in_stock_edit', 'setting.Stock/edit')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/in_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 7]); // 新加坡股票配置 - Route::post('/setting/sgd_stock_index', 'setting.Stock/index')->append(['market_type' =>9]); - Route::post('/setting/sgd_stock_add', 'setting.Stock/add')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/sgd_stock_edit', 'setting.Stock/edit')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/sgd_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>9]); + Route::post('/setting/sgd_stock_index', 'setting.Stock/index')->append(['market_type' => 9]); + Route::post('/setting/sgd_stock_add', 'setting.Stock/add')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/sgd_stock_edit', 'setting.Stock/edit')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/sgd_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 9]); // 香港股票配置 - Route::post('/setting/hk_stock_index', 'setting.Stock/index')->append(['market_type' =>12]); - Route::post('/setting/hk_stock_add', 'setting.Stock/add')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/hk_stock_edit', 'setting.Stock/edit')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/hk_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>12]); + Route::post('/setting/hk_stock_index', 'setting.Stock/index')->append(['market_type' => 12]); + Route::post('/setting/hk_stock_add', 'setting.Stock/add')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/hk_stock_edit', 'setting.Stock/edit')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/hk_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 12]); // 英国股票配置 - Route::post('/setting/uk_stock_index', 'setting.Stock/index')->append(['market_type' =>14]); - Route::post('/setting/uk_stock_add', 'setting.Stock/add')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/uk_stock_edit', 'setting.Stock/edit')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/uk_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>14]); + Route::post('/setting/uk_stock_index', 'setting.Stock/index')->append(['market_type' => 14]); + Route::post('/setting/uk_stock_add', 'setting.Stock/add')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/uk_stock_edit', 'setting.Stock/edit')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/uk_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 14]); // 法国股票配置 - Route::post('/setting/fur_stock_index', 'setting.Stock/index')->append(['market_type' =>15]); - Route::post('/setting/fur_stock_add', 'setting.Stock/add')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/fur_stock_edit', 'setting.Stock/edit')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/fur_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>15]); + Route::post('/setting/fur_stock_index', 'setting.Stock/index')->append(['market_type' => 15]); + Route::post('/setting/fur_stock_add', 'setting.Stock/add')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/fur_stock_edit', 'setting.Stock/edit')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/fur_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 15]); // 德国股票配置 - Route::post('/setting/eur_stock_index', 'setting.Stock/index')->append(['market_type' =>16]); - Route::post('/setting/eur_stock_add', 'setting.Stock/add')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/eur_stock_edit', 'setting.Stock/edit')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/eur_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>16]); + Route::post('/setting/eur_stock_index', 'setting.Stock/index')->append(['market_type' => 16]); + Route::post('/setting/eur_stock_add', 'setting.Stock/add')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/eur_stock_edit', 'setting.Stock/edit')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/eur_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 16]); // 巴西股票配置 - Route::post('/setting/brl_stock_index', 'setting.Stock/index')->append(['market_type' =>17]); - Route::post('/setting/brl_stock_add', 'setting.Stock/add')->append(['market_type' =>17])->middleware('admin_log'); - Route::post('/setting/brl_stock_edit', 'setting.Stock/edit')->append(['market_type' =>17])->middleware('admin_log'); - Route::post('/setting/brl_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>17]); + Route::post('/setting/brl_stock_index', 'setting.Stock/index')->append(['market_type' => 17]); + Route::post('/setting/brl_stock_add', 'setting.Stock/add')->append(['market_type' => 17])->middleware('admin_log'); + Route::post('/setting/brl_stock_edit', 'setting.Stock/edit')->append(['market_type' => 17])->middleware('admin_log'); + Route::post('/setting/brl_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 17]); // 日本股票配置 - Route::post('/setting/jp_stock_index', 'setting.Stock/index')->append(['market_type' =>18]); - Route::post('/setting/jp_stock_add', 'setting.Stock/add')->append(['market_type' =>18])->middleware('admin_log'); - Route::post('/setting/jp_stock_edit', 'setting.Stock/edit')->append(['market_type' =>18])->middleware('admin_log'); - Route::post('/setting/jp_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>18]); + Route::post('/setting/jp_stock_index', 'setting.Stock/index')->append(['market_type' => 18]); + Route::post('/setting/jp_stock_add', 'setting.Stock/add')->append(['market_type' => 18])->middleware('admin_log'); + Route::post('/setting/jp_stock_edit', 'setting.Stock/edit')->append(['market_type' => 18])->middleware('admin_log'); + Route::post('/setting/jp_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' => 18]); // 印度期权配置 Route::post('/setting/in_option_index', 'setting.Option/indexIn'); @@ -431,106 +433,106 @@ Route::group('/', function () { Route::post('/setting/payment_info', 'setting.Payment/info'); // 美股新股设置 - Route::post('/setting/pre_us_stock_index', 'setting.PreStock/index')->append(['market_type' =>3]); - Route::post('/setting/pre_us_stock_add', 'setting.PreStock/add')->append(['market_type' =>3])->middleware('admin_log'); // 美股新股配置 - 新增 - Route::post('/setting/pre_us_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>3])->middleware('admin_log'); - Route::post('/setting/pre_us_stock_open', 'setting.PreStock/open')->append(['market_type' =>3])->middleware('admin_log'); // 股票上市 - Route::post('/setting/pre_us_stock_del', 'setting.PreStock/del')->append(['market_type' =>3])->middleware('admin_log'); - Route::post('/setting/pre_us_stock_note', 'setting.PreStock/note')->append(['market_type' =>3])->middleware('admin_log'); - Route::post('/setting/pre_us_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>3])->middleware('admin_log');//取消IPO + Route::post('/setting/pre_us_stock_index', 'setting.PreStock/index')->append(['market_type' => 3]); + Route::post('/setting/pre_us_stock_add', 'setting.PreStock/add')->append(['market_type' => 3])->middleware('admin_log'); // 美股新股配置 - 新增 + Route::post('/setting/pre_us_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 3])->middleware('admin_log'); + Route::post('/setting/pre_us_stock_open', 'setting.PreStock/open')->append(['market_type' => 3])->middleware('admin_log'); // 股票上市 + Route::post('/setting/pre_us_stock_del', 'setting.PreStock/del')->append(['market_type' => 3])->middleware('admin_log'); + Route::post('/setting/pre_us_stock_note', 'setting.PreStock/note')->append(['market_type' => 3])->middleware('admin_log'); + Route::post('/setting/pre_us_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 3])->middleware('admin_log'); //取消IPO // 印尼股新股设置 - Route::post('/setting/pre_idn_stock_index', 'setting.PreStock/index')->append(['market_type' =>4]); - Route::post('/setting/pre_idn_stock_add', 'setting.PreStock/add')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/pre_idn_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/pre_idn_stock_open', 'setting.PreStock/open')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/pre_idn_stock_del', 'setting.PreStock/del')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/pre_idn_stock_note', 'setting.PreStock/note')->append(['market_type' =>4])->middleware('admin_log'); - Route::post('/setting/pre_idn_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>4])->middleware('admin_log'); + Route::post('/setting/pre_idn_stock_index', 'setting.PreStock/index')->append(['market_type' => 4]); + Route::post('/setting/pre_idn_stock_add', 'setting.PreStock/add')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/pre_idn_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/pre_idn_stock_open', 'setting.PreStock/open')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/pre_idn_stock_del', 'setting.PreStock/del')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/pre_idn_stock_note', 'setting.PreStock/note')->append(['market_type' => 4])->middleware('admin_log'); + Route::post('/setting/pre_idn_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 4])->middleware('admin_log'); // 马来股新股设置 - Route::post('/setting/pre_mys_stock_index', 'setting.PreStock/index')->append(['market_type' =>5]); - Route::post('/setting/pre_mys_stock_add', 'setting.PreStock/add')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/pre_mys_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/pre_mys_stock_open', 'setting.PreStock/open')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/pre_mys_stock_del', 'setting.PreStock/del')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/pre_mys_stock_note', 'setting.PreStock/note')->append(['market_type' =>5])->middleware('admin_log'); - Route::post('/setting/pre_mys_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>5])->middleware('admin_log'); + Route::post('/setting/pre_mys_stock_index', 'setting.PreStock/index')->append(['market_type' => 5]); + Route::post('/setting/pre_mys_stock_add', 'setting.PreStock/add')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/pre_mys_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/pre_mys_stock_open', 'setting.PreStock/open')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/pre_mys_stock_del', 'setting.PreStock/del')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/pre_mys_stock_note', 'setting.PreStock/note')->append(['market_type' => 5])->middleware('admin_log'); + Route::post('/setting/pre_mys_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 5])->middleware('admin_log'); // 泰股新股设置 - Route::post('/setting/pre_tha_stock_index', 'setting.PreStock/index')->append(['market_type' =>6]); - Route::post('/setting/pre_tha_stock_add', 'setting.PreStock/add')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/pre_tha_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/pre_tha_stock_open', 'setting.PreStock/open')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/pre_tha_stock_del', 'setting.PreStock/del')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/pre_tha_stock_note', 'setting.PreStock/note')->append(['market_type' =>6])->middleware('admin_log'); - Route::post('/setting/pre_tha_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>6])->middleware('admin_log'); + Route::post('/setting/pre_tha_stock_index', 'setting.PreStock/index')->append(['market_type' => 6]); + Route::post('/setting/pre_tha_stock_add', 'setting.PreStock/add')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/pre_tha_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/pre_tha_stock_open', 'setting.PreStock/open')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/pre_tha_stock_del', 'setting.PreStock/del')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/pre_tha_stock_note', 'setting.PreStock/note')->append(['market_type' => 6])->middleware('admin_log'); + Route::post('/setting/pre_tha_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 6])->middleware('admin_log'); // 印度股新股设置 - Route::post('/setting/pre_in_stock_index', 'setting.PreStock/index')->append(['market_type' =>7]); - Route::post('/setting/pre_in_stock_add', 'setting.PreStock/add')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/pre_in_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/pre_in_stock_open', 'setting.PreStock/open')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/pre_in_stock_del', 'setting.PreStock/del')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/pre_in_stock_note', 'setting.PreStock/note')->append(['market_type' =>7])->middleware('admin_log'); - Route::post('/setting/pre_in_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>7])->middleware('admin_log'); + Route::post('/setting/pre_in_stock_index', 'setting.PreStock/index')->append(['market_type' => 7]); + Route::post('/setting/pre_in_stock_add', 'setting.PreStock/add')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/pre_in_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/pre_in_stock_open', 'setting.PreStock/open')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/pre_in_stock_del', 'setting.PreStock/del')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/pre_in_stock_note', 'setting.PreStock/note')->append(['market_type' => 7])->middleware('admin_log'); + Route::post('/setting/pre_in_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 7])->middleware('admin_log'); // 新加坡股新股设置 - Route::post('/setting/pre_sgd_stock_index', 'setting.PreStock/index')->append(['market_type' =>9]); - Route::post('/setting/pre_sgd_stock_add', 'setting.PreStock/add')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/pre_sgd_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/pre_sgd_stock_open', 'setting.PreStock/open')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/pre_sgd_stock_del', 'setting.PreStock/del')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/pre_sgd_stock_note', 'setting.PreStock/note')->append(['market_type' =>9])->middleware('admin_log'); - Route::post('/setting/pre_sgd_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>9])->middleware('admin_log'); + Route::post('/setting/pre_sgd_stock_index', 'setting.PreStock/index')->append(['market_type' => 9]); + Route::post('/setting/pre_sgd_stock_add', 'setting.PreStock/add')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/pre_sgd_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/pre_sgd_stock_open', 'setting.PreStock/open')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/pre_sgd_stock_del', 'setting.PreStock/del')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/pre_sgd_stock_note', 'setting.PreStock/note')->append(['market_type' => 9])->middleware('admin_log'); + Route::post('/setting/pre_sgd_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 9])->middleware('admin_log'); // 香港新股设置 - Route::post('/setting/pre_hk_stock_index', 'setting.PreStock/index')->append(['market_type' =>12]); - Route::post('/setting/pre_hk_stock_add', 'setting.PreStock/add')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/pre_hk_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/pre_hk_stock_open', 'setting.PreStock/open')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/pre_hk_stock_del', 'setting.PreStock/del')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/pre_hk_stock_note', 'setting.PreStock/note')->append(['market_type' =>12])->middleware('admin_log'); - Route::post('/setting/pre_hk_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>12])->middleware('admin_log'); + Route::post('/setting/pre_hk_stock_index', 'setting.PreStock/index')->append(['market_type' => 12]); + Route::post('/setting/pre_hk_stock_add', 'setting.PreStock/add')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/pre_hk_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/pre_hk_stock_open', 'setting.PreStock/open')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/pre_hk_stock_del', 'setting.PreStock/del')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/pre_hk_stock_note', 'setting.PreStock/note')->append(['market_type' => 12])->middleware('admin_log'); + Route::post('/setting/pre_hk_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 12])->middleware('admin_log'); // 英国新股设置 - Route::post('/setting/pre_uk_stock_index', 'setting.PreStock/index')->append(['market_type' =>14]); - Route::post('/setting/pre_uk_stock_add', 'setting.PreStock/add')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/pre_uk_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/pre_uk_stock_open', 'setting.PreStock/open')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/pre_uk_stock_del', 'setting.PreStock/del')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/pre_uk_stock_note', 'setting.PreStock/note')->append(['market_type' =>14])->middleware('admin_log'); - Route::post('/setting/pre_uk_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>14])->middleware('admin_log'); - - Route::post('/setting/pre_fur_stock_index', 'setting.PreStock/index')->append(['market_type' =>15]); - Route::post('/setting/pre_fur_stock_add', 'setting.PreStock/add')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/pre_fur_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/pre_fur_stock_open', 'setting.PreStock/open')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/pre_fur_stock_del', 'setting.PreStock/del')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/pre_fur_stock_note', 'setting.PreStock/note')->append(['market_type' =>15])->middleware('admin_log'); - Route::post('/setting/pre_fur_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>15])->middleware('admin_log'); - - Route::post('/setting/pre_eur_stock_index', 'setting.PreStock/index')->append(['market_type' =>16]); - Route::post('/setting/pre_eur_stock_add', 'setting.PreStock/add')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/pre_eur_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/pre_eur_stock_open', 'setting.PreStock/open')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/pre_eur_stock_del', 'setting.PreStock/del')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/pre_eur_stock_note', 'setting.PreStock/note')->append(['market_type' =>16])->middleware('admin_log'); - Route::post('/setting/pre_eur_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>16])->middleware('admin_log'); - - Route::post('/setting/pre_brl_stock_index', 'setting.PreStock/index')->append(['market_type' =>17]); - Route::post('/setting/pre_brl_stock_add', 'setting.PreStock/add')->append(['market_type' =>17])->middleware('admin_log'); - Route::post('/setting/pre_brl_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>17])->middleware('admin_log'); - Route::post('/setting/pre_brl_stock_open', 'setting.PreStock/open')->append(['market_type' =>17])->middleware('admin_log'); - Route::post('/setting/pre_brl_stock_del', 'setting.PreStock/del')->append(['market_type' =>17])->middleware('admin_log'); - Route::post('/setting/pre_brl_stock_note', 'setting.PreStock/note')->append(['market_type' =>17])->middleware('admin_log'); - - Route::post('/setting/pre_jp_stock_index', 'setting.PreStock/index')->append(['market_type' =>18]); - Route::post('/setting/pre_jp_stock_add', 'setting.PreStock/add')->append(['market_type' =>18])->middleware('admin_log'); - Route::post('/setting/pre_jp_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>18])->middleware('admin_log'); - Route::post('/setting/pre_jp_stock_open', 'setting.PreStock/open')->append(['market_type' =>18])->middleware('admin_log'); - Route::post('/setting/pre_jp_stock_del', 'setting.PreStock/del')->append(['market_type' =>18])->middleware('admin_log'); - Route::post('/setting/pre_jp_stock_note', 'setting.PreStock/note')->append(['market_type' =>18])->middleware('admin_log'); + Route::post('/setting/pre_uk_stock_index', 'setting.PreStock/index')->append(['market_type' => 14]); + Route::post('/setting/pre_uk_stock_add', 'setting.PreStock/add')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/pre_uk_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/pre_uk_stock_open', 'setting.PreStock/open')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/pre_uk_stock_del', 'setting.PreStock/del')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/pre_uk_stock_note', 'setting.PreStock/note')->append(['market_type' => 14])->middleware('admin_log'); + Route::post('/setting/pre_uk_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 14])->middleware('admin_log'); + + Route::post('/setting/pre_fur_stock_index', 'setting.PreStock/index')->append(['market_type' => 15]); + Route::post('/setting/pre_fur_stock_add', 'setting.PreStock/add')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/pre_fur_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/pre_fur_stock_open', 'setting.PreStock/open')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/pre_fur_stock_del', 'setting.PreStock/del')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/pre_fur_stock_note', 'setting.PreStock/note')->append(['market_type' => 15])->middleware('admin_log'); + Route::post('/setting/pre_fur_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 15])->middleware('admin_log'); + + Route::post('/setting/pre_eur_stock_index', 'setting.PreStock/index')->append(['market_type' => 16]); + Route::post('/setting/pre_eur_stock_add', 'setting.PreStock/add')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/pre_eur_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/pre_eur_stock_open', 'setting.PreStock/open')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/pre_eur_stock_del', 'setting.PreStock/del')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/pre_eur_stock_note', 'setting.PreStock/note')->append(['market_type' => 16])->middleware('admin_log'); + Route::post('/setting/pre_eur_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' => 16])->middleware('admin_log'); + + Route::post('/setting/pre_brl_stock_index', 'setting.PreStock/index')->append(['market_type' => 17]); + Route::post('/setting/pre_brl_stock_add', 'setting.PreStock/add')->append(['market_type' => 17])->middleware('admin_log'); + Route::post('/setting/pre_brl_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 17])->middleware('admin_log'); + Route::post('/setting/pre_brl_stock_open', 'setting.PreStock/open')->append(['market_type' => 17])->middleware('admin_log'); + Route::post('/setting/pre_brl_stock_del', 'setting.PreStock/del')->append(['market_type' => 17])->middleware('admin_log'); + Route::post('/setting/pre_brl_stock_note', 'setting.PreStock/note')->append(['market_type' => 17])->middleware('admin_log'); + + Route::post('/setting/pre_jp_stock_index', 'setting.PreStock/index')->append(['market_type' => 18]); + Route::post('/setting/pre_jp_stock_add', 'setting.PreStock/add')->append(['market_type' => 18])->middleware('admin_log'); + Route::post('/setting/pre_jp_stock_edit', 'setting.PreStock/edit')->append(['market_type' => 18])->middleware('admin_log'); + Route::post('/setting/pre_jp_stock_open', 'setting.PreStock/open')->append(['market_type' => 18])->middleware('admin_log'); + Route::post('/setting/pre_jp_stock_del', 'setting.PreStock/del')->append(['market_type' => 18])->middleware('admin_log'); + Route::post('/setting/pre_jp_stock_note', 'setting.PreStock/note')->append(['market_type' => 18])->middleware('admin_log'); Route::post('/setting/pre_stock_cancel', 'setting.PreStock/cancel')->middleware('admin_log'); @@ -563,18 +565,18 @@ Route::group('/', function () { Route::post('/flow/fee', 'Flow/fee'); Route::post('/flow/brokerage', 'Flow/brokerage'); - Route::post('/flow/us_stock', 'Flow/StockLogs')->append(['market_type' =>3]); - Route::post('/flow/idn_stock', 'Flow/StockLogs')->append(['market_type' =>4]); - Route::post('/flow/mys_stock', 'Flow/StockLogs')->append(['market_type' =>5]); - Route::post('/flow/tha_stock', 'Flow/StockLogs')->append(['market_type' =>6]); - Route::post('/flow/in_stock', 'Flow/StockLogs')->append(['market_type' =>7]); - Route::post('/flow/sgd_stock', 'Flow/StockLogs')->append(['market_type' =>9]); - Route::post('/flow/hk_stock', 'Flow/StockLogs')->append(['market_type' =>12]); - Route::post('/flow/uk_stock', 'Flow/StockLogs')->append(['market_type' =>14]); - Route::post('/flow/fur_stock', 'Flow/StockLogs')->append(['market_type' =>15]); - Route::post('/flow/eur_stock', 'Flow/StockLogs')->append(['market_type' =>16]); - Route::post('/flow/eur_stock', 'Flow/StockLogs')->append(['market_type' =>17]); -// Route::post('/flow/jp_stock', 'Flow/StockLogs')->append(['market_type' =>18]); // 原有的日股资产流水 + Route::post('/flow/us_stock', 'Flow/StockLogs')->append(['market_type' => 3]); + Route::post('/flow/idn_stock', 'Flow/StockLogs')->append(['market_type' => 4]); + Route::post('/flow/mys_stock', 'Flow/StockLogs')->append(['market_type' => 5]); + Route::post('/flow/tha_stock', 'Flow/StockLogs')->append(['market_type' => 6]); + Route::post('/flow/in_stock', 'Flow/StockLogs')->append(['market_type' => 7]); + Route::post('/flow/sgd_stock', 'Flow/StockLogs')->append(['market_type' => 9]); + Route::post('/flow/hk_stock', 'Flow/StockLogs')->append(['market_type' => 12]); + Route::post('/flow/uk_stock', 'Flow/StockLogs')->append(['market_type' => 14]); + Route::post('/flow/fur_stock', 'Flow/StockLogs')->append(['market_type' => 15]); + Route::post('/flow/eur_stock', 'Flow/StockLogs')->append(['market_type' => 16]); + Route::post('/flow/eur_stock', 'Flow/StockLogs')->append(['market_type' => 17]); + // Route::post('/flow/jp_stock', 'Flow/StockLogs')->append(['market_type' =>18]); // 原有的日股资产流水 Route::post('/flow/jp_stock', 'Flow/jpStock'); // 新版的日股资产流水 Route::post('/flow/forex_stock', 'Flow/forexStock'); //大宗资产流水 Route::post('/flow/forex_list', 'Flow/forexList'); //外汇流水 @@ -655,7 +657,10 @@ Route::group('/', function () { Route::post('account/translator_bind_customer_list', 'Admin/translatorBindCustomerList')->middleware('admin_log'); // 翻译员绑定的客服列表 Route::post('account/group_leader_with_user', 'Admin/groupLeaderWithUser'); // 组长与用户添加chat好友 Route::post('account/seller_with_user', 'Admin/sellerWithUser'); // 电销与用户添加chat好友 - Route::post('admin/get_user_access_log', 'Admin/getUserAccessLog'); //获取用户访问页面的记录 + Route::any('admin/get_user_access_log', 'Admin/getUserAccessLog'); //获取用户访问页面的记录 + Route::post('admin/get_user_access_log_summary', 'Admin/getUserAccessLogSummary'); //获取用户访问页面的记录 + Route::any('admin/get_visitor_access_log', 'Admin/getVisitorAccessLog'); //获取游客访问页面的记录 + Route::post('admin/get_visitor_access_log_summary', 'Admin/getVisitorAccessLogSummary'); //获取用户访问页面的记录 Route::post('admin/get_admin_operation_log', 'Admin/getAdminOperationLog'); //获取管理员admin的操作记录 //权限菜单 @@ -738,4 +743,3 @@ Route::get('/setting/in_option_refresh', 'setting.Option/refresh'); // 修改 印度股-source Route::post('/update_source', 'Index/updateSource'); - diff --git a/app/admin/service/AdminService.php b/app/admin/service/AdminService.php index 8ad9a3ef..5fe4af8d 100644 --- a/app/admin/service/AdminService.php +++ b/app/admin/service/AdminService.php @@ -17,6 +17,8 @@ use app\model\UserAccessLogModel; use app\model\UserChatGroupModel; use app\model\UserChatLinkModel; use app\model\UserModel; +use app\model\VipCodeModel; +use itinysun\model\helper\Service; use think\facade\Cache; use think\exception\ValidateException; use app\utility\UnqId; @@ -36,12 +38,12 @@ class AdminService extends AdminBaseService if (!isset($param['role_name'])) { return $this->toData('400', '缺少参数'); } - $role = AuthRoleModel::where(['name'=>$param['role_name']])->find(); + $role = AuthRoleModel::where(['name' => $param['role_name']])->find(); if (empty($role)) { return $this->toData('500', '没有目标角色信息'); } // 根据角色查询账号列表 - $users = AdminModel::where(['role_id'=>$role->id])->select()->toArray(); + $users = AdminModel::where(['role_id' => $role->id])->select()->toArray(); return $this->toData('0', 'ok', $users); } catch (\Exception $e) { return $this->toData('500', '系统错误', [$e->getMessage(), $e->getTrace()]); @@ -66,7 +68,7 @@ class AdminService extends AdminBaseService return $this->toData('1', '添加失败'); } // 检测一下是否注册过聊天账号,没有的话就注册一下聊天账号 - $isRegChat = UserChatLinkModel::where(['user_id'=>$resAdmin->id, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $isRegChat = UserChatLinkModel::where(['user_id' => $resAdmin->id, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if (empty($isRegChat)) { $chatData = [ 'Username' => $resAdmin->user_name, //用account.id + account.user_name 拼接作为聊天账号注册的Username @@ -87,13 +89,13 @@ class AdminService extends AdminBaseService ]); } // 检测一下是否创建过聊天群组,没有的话创建一个 - $chatGroup = UserChatGroupModel::where(['user_id'=>$resAdmin->id,'remark'=>UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT])->find(); + $chatGroup = UserChatGroupModel::where(['user_id' => $resAdmin->id, 'remark' => UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT])->find(); if (empty($chatGroup)) { - $groupName = 'ivs-group'.$resAdmin->id; + $groupName = 'ivs-group' . $resAdmin->id; $chatGroupData = [ 'Name' => $groupName, ]; - $chatGroupUrl = env('CHAT_SERVER.BASE_URL') . '/api/group/'.$regChat['data']['uuid']; + $chatGroupUrl = env('CHAT_SERVER.BASE_URL') . '/api/group/' . $regChat['data']['uuid']; $chatGroupRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatGroupUrl, $chatGroupData); if (!isset($chatGroupRes['data']['group_uuid'])) { return $this->toData('100400', '创建聊天群组失败'); @@ -113,7 +115,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('100500', '系统繁忙.', [$exception->getMessage()]); } - } /** @@ -147,7 +148,7 @@ class AdminService extends AdminBaseService $list[$i]['role_name'] = $roleList[$index]['name']; } - $list[$i]['url'] = $host . '/register/index?=agent_code='.$list[$i]['invite_code']; + $list[$i]['url'] = $host . '/register/index?=agent_code=' . $list[$i]['invite_code']; } } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $list]); @@ -183,7 +184,7 @@ class AdminService extends AdminBaseService } $infoArr['role_name'] = $role->name; // 获取用户的聊天账号信息 - $chatInfo = UserChatLinkModel::where(['user_id'=>$userId, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $chatInfo = UserChatLinkModel::where(['user_id' => $userId, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); $chat_uuid = 0; if (!empty($chatInfo)) { $chat_uuid = $chatInfo->chat_uuid; @@ -232,7 +233,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); } - } /** @@ -273,7 +273,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); } - } public function updateAccountStauts($accountId, $param): array @@ -300,7 +299,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); } - } @@ -336,7 +334,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); } - } public function del($id): array @@ -352,7 +349,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); } - } /** @@ -370,9 +366,9 @@ class AdminService extends AdminBaseService if ($rules) { $rules = explode(",", $rules); //字符串转换为数字类型 -// $rules=array_map(function ($value){ -// return (int)$value; -// },$rules); + // $rules=array_map(function ($value){ + // return (int)$value; + // },$rules); } // 返回 return $this->toData('0', 'Modification successful.', $rules); @@ -404,7 +400,6 @@ class AdminService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); } - } public function logList($param) @@ -421,7 +416,7 @@ class AdminService extends AdminBaseService $list = $adminLogModel->order('id', 'desc')->page($param['page'], $param['limit'])->select()->toArray(); $accountIds = array_column($list, "admin_id"); $accountList = AdminModel::where('id', 'in', $accountIds)->column('user_name', 'id'); -// $menuList = AuthRuleModel::column('title', 'path'); + // $menuList = AuthRuleModel::column('title', 'path'); if (!empty($list)) { foreach ($list as &$v) { $v['admin_name'] = $accountList[$v['admin_id']] ?? '-'; @@ -438,11 +433,10 @@ class AdminService extends AdminBaseService { try { $user = AdminModel::select(); - foreach ($user as $v){ + foreach ($user as $v) { $inviteCode = (new BaseHomeService())->getUniqInviteCode(); - AdminModel::where('id',$v->id)->update(['invite_code'=>$inviteCode]); + AdminModel::where('id', $v->id)->update(['invite_code' => $inviteCode]); } - } catch (\Exception $exception) { return $this->toData('500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); } @@ -456,14 +450,14 @@ class AdminService extends AdminBaseService return $this->toData('400', '缺少分页参数'); } // 查询角色表中翻译角色的id - $role = AuthRoleModel::where(['name'=>'翻译'])->find(); + $role = AuthRoleModel::where(['name' => '翻译'])->find(); if (empty($role)) { return $this->toData('400', '系统不存在翻译角色,请先创建'); } // 查询属于翻译角色的所有账号 - $where = ['role_id'=>$role->id]; + $where = ['role_id' => $role->id]; if (!empty($param['user_name'])) { - $list = AdminModel::where($where)->whereLike('user_name', '%'.$param['user_name'].'%')->order('id', 'desc')->paginate([ + $list = AdminModel::where($where)->whereLike('user_name', '%' . $param['user_name'] . '%')->order('id', 'desc')->paginate([ 'list_rows' => $param['limit'], 'page' => $param['page'], ]); @@ -497,24 +491,24 @@ class AdminService extends AdminBaseService } // 翻译员的聊天账号信息 - $translatorChatInfo = UserChatLinkModel::where(['user_id'=>$param['translator_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $translatorChatInfo = UserChatLinkModel::where(['user_id' => $param['translator_id'], 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if (empty($translatorChatInfo)) { return $this->toData('500', '翻译员的聊条账号信息错误'); } // 翻译员创建的聊天群组信息 - $chatGroup = UserChatGroupModel::where(['user_id'=>$param['translator_id'], 'remark'=>UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT])->find(); + $chatGroup = UserChatGroupModel::where(['user_id' => $param['translator_id'], 'remark' => UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT])->find(); if (empty($chatGroup)) { return $this->toData('500', 'The chat group is error.'); } foreach ($param['customer_id'] as $customerId) { // 记录好友关系 - $translatorCustomer = TranslatorCustomerModel::where(['translator_id'=>$param['translator_id'], 'customer_id'=>$customerId])->find(); + $translatorCustomer = TranslatorCustomerModel::where(['translator_id' => $param['translator_id'], 'customer_id' => $customerId])->find(); if (empty($translatorCustomer)) { - TranslatorCustomerModel::create(['translator_id'=>$param['translator_id'], 'customer_id'=>$customerId]); + TranslatorCustomerModel::create(['translator_id' => $param['translator_id'], 'customer_id' => $customerId]); } //查询客服的聊天账号uuid - $customerChatInfo = UserChatLinkModel::where(['user_id'=>$customerId, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $customerChatInfo = UserChatLinkModel::where(['user_id' => $customerId, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if (empty($customerChatInfo)) { return $this->toData('500', '客服的聊天账号信息错误'); } @@ -524,11 +518,11 @@ class AdminService extends AdminBaseService ]; $chatFriendsUrl = env('CHAT_SERVER.BASE_URL') . '/api/eachOtherFriends'; $chatFriendsRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatFriendsUrl, $chatFriendsData); - Log::info("翻译员添加客服好友结果:". json_encode($chatFriendsRes)); + Log::info("翻译员添加客服好友结果:" . json_encode($chatFriendsRes)); // 将客服添加到翻译员的聊天群组中 - $joinChatGroupUrl = env('CHAT_SERVER.BASE_URL') . '/api/group/join/'.$customerChatInfo->chat_uuid.'/'.$chatGroup->group_uuid; + $joinChatGroupUrl = env('CHAT_SERVER.BASE_URL') . '/api/group/join/' . $customerChatInfo->chat_uuid . '/' . $chatGroup->group_uuid; $joinChatGroupRes = (new \app\utility\RequestChatServer())->ReqChatServer($joinChatGroupUrl, []); - Log::info("翻译员添加客服到聊天群组结果:". json_encode($joinChatGroupRes)); + Log::info("翻译员添加客服到聊天群组结果:" . json_encode($joinChatGroupRes)); } return $this->toData('0', 'SUCCESS', []); @@ -547,7 +541,7 @@ class AdminService extends AdminBaseService if (empty($param['page']) || empty($param['limit'])) { return $this->toData('400', '缺少分页参数'); } - $list = TranslatorCustomerModel::where(['translator_id'=>$param['translator_id']])->order('id', 'desc')->paginate([ + $list = TranslatorCustomerModel::where(['translator_id' => $param['translator_id']])->order('id', 'desc')->paginate([ 'list_rows' => $param['limit'], 'page' => $param['page'], ]); @@ -571,19 +565,19 @@ class AdminService extends AdminBaseService } // 总监及以上角色才有权限分配用户与组长角色绑定 - $account = AdminModel::where(['id'=>$adminId])->find(); + $account = AdminModel::where(['id' => $adminId])->find(); if (empty($account)) { return $this->toData('500', '当前账号数据为空'); } - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return $this->toData('500', '当前账号分配的角色为空'); } - if (!in_array($role->name, [AuthRoleModel::NAME_ADMIN,AuthRoleModel::NAME_AGENT,AuthRoleModel::NAME_DIRECTOR])) { + if (!in_array($role->name, [AuthRoleModel::NAME_ADMIN, AuthRoleModel::NAME_AGENT, AuthRoleModel::NAME_DIRECTOR])) { return $this->toData('500', '当前账号无权分配用户与组长角色绑定'); } - $relation = GroupLeaderWithUserModel::where(['user_id'=>$param['user_id']])->find(); + $relation = GroupLeaderWithUserModel::where(['user_id' => $param['user_id']])->find(); if (empty($relation)) { $res = GroupLeaderWithUserModel::create([ 'user_id' => $param['user_id'], @@ -594,11 +588,11 @@ class AdminService extends AdminBaseService } } - $adminUserChat = UserChatLinkModel::where(['user_id'=>$param['group_leader_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $adminUserChat = UserChatLinkModel::where(['user_id' => $param['group_leader_id'], 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if (empty($adminUserChat)) { return $this->toData('400', '管理端账号缺少chat信息'); } - $frontUserChat = UserChatLinkModel::where(['user_id'=>$param['user_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); + $frontUserChat = UserChatLinkModel::where(['user_id' => $param['user_id'], 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); if (empty($frontUserChat)) { return $this->toData('400', '用户账号缺少chat信息'); } @@ -622,19 +616,19 @@ class AdminService extends AdminBaseService return $this->toData('400', '缺少参数'); } // 组长及以上角色才有权限分配用户与电销角色绑定 - $account = AdminModel::where(['id'=>$adminId])->find(); + $account = AdminModel::where(['id' => $adminId])->find(); if (empty($account)) { return $this->toData('500', '当前账号数据为空'); } - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return $this->toData('500', '当前账号分配的角色为空'); } - if (!in_array($role->name, [AuthRoleModel::NAME_ADMIN,AuthRoleModel::NAME_AGENT,AuthRoleModel::NAME_DIRECTOR, AuthRoleModel::NAME_TEAM_HEADER])) { + if (!in_array($role->name, [AuthRoleModel::NAME_ADMIN, AuthRoleModel::NAME_AGENT, AuthRoleModel::NAME_DIRECTOR, AuthRoleModel::NAME_TEAM_HEADER])) { return $this->toData('500', '当前账号无权分配用户与电销角色绑定'); } - $relation = SellerWithUserModel::where(['user_id'=>$param['user_id']])->find(); + $relation = SellerWithUserModel::where(['user_id' => $param['user_id']])->find(); if (empty($relation)) { $res = SellerWithUserModel::create([ 'user_id' => $param['user_id'], @@ -645,11 +639,11 @@ class AdminService extends AdminBaseService } } - $adminUserChat = UserChatLinkModel::where(['user_id'=>$param['seller_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $adminUserChat = UserChatLinkModel::where(['user_id' => $param['seller_id'], 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if (empty($adminUserChat)) { return $this->toData('400', '管理端账号缺少chat信息'); } - $frontUserChat = UserChatLinkModel::where(['user_id'=>$param['user_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); + $frontUserChat = UserChatLinkModel::where(['user_id' => $param['user_id'], 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); if (empty($frontUserChat)) { return $this->toData('400', '用户账号缺少chat信息'); } @@ -665,6 +659,118 @@ class AdminService extends AdminBaseService } } + // 用户访问页面的记录汇总 + public function getUserAccessLogSummary($adminId, $param) + { + try { + if (empty($param['page']) || empty($param['limit'])) { + return $this->toData('400', '缺少分页参数'); + } + + // 获取账号信息 + $account = AdminModel::where('id', $adminId)->find(); + if (empty($account)) { + return $this->toData('400', '当前账号数据为空'); + } + + // 获取账号角色信息 + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); + if (empty($role)) { + return $this->toData('400', '当前账号分配的角色数据为空'); + } + + // 构建可查看的用户ID筛选条件 + $whereUser = [ + ['ual.user_id', '>', 0] + ]; + switch ($role->name) { + case AuthRoleModel::NAME_ADMIN: + if (!empty($param['user_id'])) { + $whereUser[] = ['user_id', '=', $param['user_id']]; + } + break; + case AuthRoleModel::NAME_AGENT: + $userIds = UserModel::where('agent_id', $adminId)->column('user_id'); + if (!empty($param['user_id']) && in_array($param['user_id'], $userIds)) { + $whereUser[] = ['ual.user_id', '=', $param['user_id']]; + } else { + $whereUser[] = ['ual.user_id', 'in', $userIds]; + } + break; + case AuthRoleModel::NAME_DIRECTOR: + $teamHeaders = AdminModel::where('parent_id', $adminId)->column('id'); + $userIds = []; + if (!empty($teamHeaders)) { + $customer = AdminModel::whereIn('parent_id', $teamHeaders)->column('id'); + if (!empty($customer)) { + $userIds = UserModel::whereIn('customer_id', $customer)->column('user_id'); + } + } + if (!empty($param['user_id']) && in_array($param['user_id'], $userIds)) { + $whereUser[] = ['ual.user_id', '=', $param['user_id']]; + } else { + $whereUser[] = ['ual.user_id', 'in', $userIds]; + } + break; + case AuthRoleModel::NAME_TEAM_HEADER: + $customer = AdminModel::where('parent_id', $adminId)->column('id'); + $userIds = []; + if (!empty($customer)) { + $userIds = UserModel::whereIn('customer_id', $customer)->column('user_id'); + } + if (!empty($param['user_id']) && in_array($param['user_id'], $userIds)) { + $whereUser[] = ['ual.user_id', '=', $param['user_id']]; + } else { + $whereUser[] = ['ual.user_id', 'in', $userIds]; + } + break; + case AuthRoleModel::NAME_CUSTOMER: + $userIds = UserModel::where(['customer_id' => $adminId])->column('user_id'); + if (!empty($param['user_id']) && in_array($param['user_id'], $userIds)) { + $whereUser[] = ['ual.user_id', '=', $param['user_id']]; + } else { + $whereUser[] = ['ual.user_id', 'in', $userIds]; + } + break; + default: + return $this->toData('500', '普通角色没有关联用户账号,不能查看用户数'); + } + + // 组装主查询条件 + $where = []; + if (!empty($param['module'])) { + $where[] = ['module', '=', $param['module']]; + } + if (!empty($param['ip'])) { + $where['ip'] = $param['ip']; + } + // 构建查询(按 user_id 分组统计访问次数) + $query = Db::name('user_access_log') + ->alias('ual') + ->field('ual.user_id, u.user_no, COUNT(*) as access_count, MAX(ual.created_at) as created_at') + ->join('users u', 'ual.user_id = u.user_id', 'LEFT') + ->where($where) + ->where($whereUser) + ->group('ual.user_id') + ->order('access_count', 'desc'); + + $list = $query->paginate([ + 'list_rows' => $param['limit'], + 'page' => $param['page'], + ]); + + return $this->toData('0', 'SUCCESS', [ + 'list' => $list->items(), + 'page' => $list->currentPage(), + 'total' => $list->total(), + 'last_page' => $list->lastPage(), + ]); + } catch (\Exception $exception) { + return $this->toData('500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); + } + } + + // 用户访问页面的记录 public function getUserAccessLog($adminId, $param) { @@ -678,12 +784,14 @@ class AdminService extends AdminBaseService return $this->toData('400', '当前账号数据为空'); } // 获取账号角色信息 - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return $this->toData('400', '当前账号分配的角色数据为空'); } // 根据账号角色限制数据查看范围, 超级管理员可以查看所有用户数据,代理可以查看自己所属用户的数据,总监、组长以此类推 - $whereUser = []; + $whereUser = [ + ['user_id', '>', 0] + ]; switch ($role->name) { case AuthRoleModel::NAME_ADMIN: // 超级管理员可以查看所有数据 if (!empty($param['user_id'])) { @@ -741,10 +849,163 @@ class AdminService extends AdminBaseService if (!empty($param['module'])) { $where['module'] = $param['module']; } - $list = UserAccessLogModel::where($where)->where($whereUser)->order('id', 'desc')->paginate([ + if (!empty($param['ip'])) { + $where['ip'] = $param['ip']; + } + if (!empty($param['start_time']) && !empty($param['end_time'])) { + $whereUser[] = ['created_at', 'between time', [$param['start_time'], $param['end_time']]]; + } + if ($param['export'] ?? false) { + //太多了 只取10000条 + $list = UserAccessLogModel::with(['user'])->where($where)->where($whereUser)->order('id', 'desc')->limit(10000)->select(); + + $exportData = [['ID', '用户id', '用户编号', '访问时间', 'IP地址', '访问页面', '模块', '备注']]; + foreach ($list as $item) { + $exportData[] = [$item->id, $item->user_id, $item->user->user_no ?? '', $item->created_at, $item->ip, $item->page_url, $item->module, $item->remark]; + } + + return ExportService::exportCsv($exportData, '用户浏览信息导出.csv'); + } else { + $list = UserAccessLogModel::with(['user'])->where($where)->where($whereUser)->order('id', 'desc')->paginate([ + 'list_rows' => $param['limit'], + 'page' => $param['page'], + ]); + + foreach ($list->items() as $item) { + $data[] = [ + 'id' => $item->id, + 'user_id' => $item->user_id, + 'created_at' => $item->created_at, + 'ip' => $item->ip, + 'page_url' => $item->page_url, + 'module' => $item->module, + 'remark' => $item->remark, + 'updated_at' => $item->updated_at, + // 关联字段 + 'user_no' => $item->user->user_no ?? '', + ]; + } + + + return $this->toData('0', 'SUCCESS', [ + 'list' => $data, + 'page' => $list->currentPage(), + 'total' => $list->total(), + 'last_page' => $list->lastPage(), + ]); + } + } catch (\Exception $exception) { + return $this->toData('500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); + } + } + + // 游客访问页面的记录 + public function getVisitorAccessLog($adminId, $param) + { + try { + if (empty($param['page']) || empty($param['limit'])) { + return $this->toData('400', '缺少分页参数'); + } + // 获取账号信息 + $account = AdminModel::where('id', $adminId)->find(); + if (empty($account)) { + return $this->toData('400', '当前账号数据为空'); + } + // 获取账号角色信息 + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); + if (empty($role)) { + return $this->toData('400', '当前账号分配的角色数据为空'); + } + // 根据账号角色限制数据查看范围, 超级管理员可以查看所有用户数据,代理可以查看自己所属用户的数据,总监、组长以此类推 + $whereUser = [ + ['user_id', '=', null] + ]; + + $where = []; + if (!empty($param['module'])) { + $where['module'] = $param['module']; + } + if (!empty($param['ip'])) { + $where['ip'] = $param['ip']; + } + if (!empty($param['start_time']) && !empty($param['end_time'])) { + $whereUser[] = ['created_at', 'between time', [$param['start_time'], $param['end_time']]]; + } + if ($param['export'] ?? false) { + //太多了 只取10000条 + $list = UserAccessLogModel::where($where)->where($whereUser)->order('id', 'desc')->limit(10000)->select(); + $exportData = [['ID', '访问时间', 'IP地址', '访问页面', '模块', '备注']]; + foreach ($list as $item) { + $exportData[] = [$item->id, $item->created_at, $item->ip, $item->page_url, $item->module, $item->remark]; + } + return ExportService::exportCsv($exportData, '访客浏览信息导出.csv'); + } else { + + $list = UserAccessLogModel::where($where)->where($whereUser)->order('id', 'desc')->paginate([ + 'list_rows' => $param['limit'], + 'page' => $param['page'], + ]); + return $this->toData('0', 'SUCCESS', [ + 'list' => $list->items(), + 'page' => $list->currentPage(), + 'total' => $list->total(), + 'last_page' => $list->lastPage(), + ]); + } + } catch (\Exception $exception) { + return $this->toData('500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); + } + } + // 访问页面的记录汇总 + public function getVisitorAccessLogSummary($adminId, $param) + { + try { + if (empty($param['page']) || empty($param['limit'])) { + return $this->toData('400', '缺少分页参数'); + } + + // 获取账号信息 + $account = AdminModel::where('id', $adminId)->find(); + if (empty($account)) { + return $this->toData('400', '当前账号数据为空'); + } + + // 获取账号角色信息 + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); + if (empty($role)) { + return $this->toData('400', '当前账号分配的角色数据为空'); + } + + // 构建可查看的用户ID筛选条件 + $whereUser = [ + ['ual.user_id', '=', null], + ]; + + // 组装主查询条件 + $where = []; + if (!empty($param['module'])) { + $where[] = ['module', '=', $param['module']]; + } + + if (!empty($param['ip'])) { + $where[] = ['ip', '=', $param['ip']]; + } + + // 构建查询(按 user_id 分组统计访问次数) + $query = Db::name('user_access_log') + ->alias('ual') + // ->field('user_id, COUNT(*) as access_count, MAX(create_time) as last_visit_time') + ->field('ip,COUNT(*) as access_count, MAX(ual.created_at) as created_at') + ->where($where) + ->where($whereUser) + ->group('ip') + ->order('access_count', 'desc'); + + $list = $query->paginate([ 'list_rows' => $param['limit'], 'page' => $param['page'], ]); + return $this->toData('0', 'SUCCESS', [ 'list' => $list->items(), 'page' => $list->currentPage(), @@ -755,7 +1016,6 @@ class AdminService extends AdminBaseService return $this->toData('500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); } } - public function getAdminOperationLog($adminId, $param) { try { @@ -768,7 +1028,7 @@ class AdminService extends AdminBaseService return $this->toData('400', '当前账号数据为空'); } // 获取账号角色信息 - $role = AuthRoleModel::where(['id'=>$account->role_id])->find(); + $role = AuthRoleModel::where(['id' => $account->role_id])->find(); if (empty($role)) { return $this->toData('400', '当前账号分配的角色数据为空'); } @@ -783,12 +1043,12 @@ class AdminService extends AdminBaseService case AuthRoleModel::NAME_AGENT: // 代理 - 查看自己以及下属账号的操作数据 $ids = [$adminId]; $directors = AdminModel::where('parent_id', $adminId)->column('id'); - if (!empty($directors)){ + if (!empty($directors)) { $ids = array_merge($ids, $directors); $teamHeader = AdminModel::where('parent_id', 'in', $directors)->column('id'); if (!empty($teamHeader)) { $ids = array_merge($ids, $teamHeader); - $customer = AdminModel::where('parent_id','in', $teamHeader)->column('id'); + $customer = AdminModel::where('parent_id', 'in', $teamHeader)->column('id'); if (!empty($customer)) { $ids = array_merge($ids, $customer); } @@ -803,15 +1063,15 @@ class AdminService extends AdminBaseService case AuthRoleModel::NAME_DIRECTOR: // 总监 - 查看自己以及下属账号的操作数据 $ids = [$adminId]; $teamHeader = AdminModel::where('parent_id', $adminId)->column('id'); - if (!empty($teamHeader)){ + if (!empty($teamHeader)) { $ids = array_merge($ids, $teamHeader); - $customer = AdminModel::where('parent_id','in', $teamHeader)->column('id'); + $customer = AdminModel::where('parent_id', 'in', $teamHeader)->column('id'); if (!empty($customer)) { $ids = array_merge($ids, $customer); } } if (!empty($param['admin_id']) && in_array($param['admin_id'], $ids)) { - $where[] = ['admin_id', '=',$param['admin_id']]; + $where[] = ['admin_id', '=', $param['admin_id']]; } else { $where[] = ['admin_id', 'in', $ids]; } @@ -857,7 +1117,7 @@ class AdminService extends AdminBaseService if (empty($param['user_id'])) { return $this->toData('400', '请指定用户ID'); } - if (empty($param['days']) || $param['days'] <= 0 ) { + if (empty($param['days']) || $param['days'] <= 0) { return $this->toData('400', '赠送时间错误'); } $userId = $param['user_id']; @@ -870,7 +1130,7 @@ class AdminService extends AdminBaseService // 记录赠送vip信息 Db::transaction(function () use ($userId, $giveDay) { // 查询用户是否开通过vip,更新用户vip到期时间 - $vipLog = PurchaseVipModel::where(['user_id'=>$userId])->find(); + $vipLog = PurchaseVipModel::where(['user_id' => $userId])->find(); $expireTimestamp = strtotime("+$giveDay day"); $expireTime = date("Y-m-d H:i:s", $expireTimestamp); if (!empty($vipLog)) { @@ -911,7 +1171,7 @@ class AdminService extends AdminBaseService if (!isset($param['page']) || !isset($param['limit']) || !isset($param['user_id'])) { return $this->toData('400', lang('parameter_error')); } - $list = PurchaseVipLogModel::where(['user_id'=>$param['user_id']])->order('id', 'desc')->paginate([ + $list = PurchaseVipLogModel::where(['user_id' => $param['user_id']])->order('id', 'desc')->paginate([ 'list_rows' => $param['limit'], 'page' => $param['page'], ]); @@ -926,6 +1186,65 @@ class AdminService extends AdminBaseService } } + // 生成vip兑换码 + public function generateVipCode($param) + { + try { + if (!isset($param['day']) || $param['day'] <= 0) { + return $this->toData('400', lang('parameter_error')); + } + // 一次性生成10个兑换码 + $resArr = []; + for ($i = 1; $i <= 10; $i++) { + $code = (new UnqId())->generateRandomCode(15); + $exists = VipCodeModel::where(['vip_code' => $code])->find(); + if (!empty($exists) && $exists->vip_code == $code) { + for ($j = 1; $j <= 5; $j++) { // 如果存在相同code,本轮再试5次 + $code = (new UnqId())->generateRandomCode(15); + $exists = VipCodeModel::where(['vip_code' => $code])->find(); + if (empty($exists)) { + VipCodeModel::create(['vip_code' => $code, 'day' => $param['day'], 'status' => 0, 'uid' => 0]); + $resArr[] = $code; + break; + } + } + } else { + VipCodeModel::create(['vip_code' => $code, 'day' => $param['day'], 'status' => 0, 'uid' => 0]); + $resArr[] = $code; + } + } + + return $this->toData('0', 'successful', [$resArr]); + } catch (\Exception $e) { + return $this->toData('500', 'The system is busy.', [$e->getMessage(), $e->getTrace()]); + } + } + + public function getVipCode($param) + { + try { + if (!isset($param['page']) || !isset($param['limit'])) { + return $this->toData('400', lang('parameter_error')); + } + $where = []; + if (isset($param['status'])) { + $where['status'] = $param['status']; + } + $list = VipCodeModel::where($where)->order('id', 'desc')->paginate([ + 'list_rows' => $param['limit'], + 'page' => $param['page'], + ]); + return $this->toData('0', 'SUCCESS', [ + 'list' => $list->items(), + 'page' => $list->currentPage(), + 'total' => $list->total(), + 'last_page' => $list->lastPage(), + ]); + } catch (\Exception $e) { + return $this->toData('500', 'The system is busy.', [$e->getMessage(), $e->getTrace()]); + } + } + // 单次发送邮件或短信 public function sendEmailOrSms($param) { @@ -933,11 +1252,11 @@ class AdminService extends AdminBaseService if (empty($param['user_id']) || empty($param['type']) || empty($param['content'])) { return $this->toData('400', '参数错误'); } - if (!in_array($param['type'], [1,2])) { + if (!in_array($param['type'], [1, 2])) { return $this->toData('400', '参数错误'); } - $user = UserModel::where(['user_id'=>$param['user_id']])->find(); + $user = UserModel::where(['user_id' => $param['user_id']])->find(); if (empty($user)) { return $this->toData('500', '用户不存在'); } @@ -990,7 +1309,7 @@ class AdminService extends AdminBaseService { try { // type: 1-短信,2-邮件 - if (!in_array($param['type'], [1,2])) { + if (!in_array($param['type'], [1, 2])) { return $this->toData('400', '发送类型不在支持范围内'); } // content: 发送的消息内容 @@ -1015,7 +1334,7 @@ class AdminService extends AdminBaseService } $jobName = 'app\admin\job\SendSmsFromBackend'; Queue::push($jobName, [ - 'mobile' => $v['country_code'].$v['phone_number'], + 'mobile' => $v['country_code'] . $v['phone_number'], 'message' => $param['content'], ], 'sendSmsFromBackend'); } @@ -1050,5 +1369,4 @@ class AdminService extends AdminBaseService return $this->toData('500', 'The system is busy', [$e->getMessage(), $e->getTrace()]); } } - } diff --git a/app/admin/service/ExportService.php b/app/admin/service/ExportService.php new file mode 100644 index 00000000..1872f41c --- /dev/null +++ b/app/admin/service/ExportService.php @@ -0,0 +1,80 @@ +getActiveSheet(); + + // 列号转字母函数 + $colIndexToLetter = function ($index) { + $letters = ''; + while ($index >= 0) { + $letters = chr($index % 26 + 65) . $letters; + $index = intval($index / 26) - 1; + } + return $letters; + }; + + // 写入数据 + foreach ($data as $rowIndex => $row) { + foreach ($row as $colIndex => $value) { + $cell = $colIndexToLetter($colIndex) . ($rowIndex + 1); // 例如 A1, B1... + $sheet->setCellValue($cell, $value); + } + } + + // 输出到浏览器 + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + header("Content-Disposition: attachment; filename=\"{$filename}\""); + header('Cache-Control: max-age=0'); + + $writer = new Xlsx($spreadsheet); + $writer->save('php://output'); + exit; + } + + /** + * 导出 CSV + * @param array $data 二维数组(含表头) + * @param string $filename 导出文件名 + */ + public static function exportCsv(array $data, string $filename = '') + { + if (empty($data)) { + throw new \Exception('导出数据不能为空'); + } + + $filename = $filename ?: '导出_' . date('Ymd_His') . '.csv'; + + header('Content-Type: text/csv'); + header("Content-Disposition: attachment; filename={$filename}"); + + $fp = fopen('php://output', 'w'); + fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 防止中文乱码 + + foreach ($data as $row) { + fputcsv($fp, $row); + } + + fclose($fp); + exit; + } +} diff --git a/app/admin/service/FlowService.php b/app/admin/service/FlowService.php index 2a72f439..1bce7229 100644 --- a/app/admin/service/FlowService.php +++ b/app/admin/service/FlowService.php @@ -43,7 +43,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -89,7 +89,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -111,7 +110,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -157,7 +156,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -180,7 +178,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -224,9 +222,7 @@ class FlowService extends AdminBaseService $rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 } } - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -249,7 +245,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -295,7 +291,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -318,7 +313,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -378,7 +373,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -424,7 +419,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -446,7 +440,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -492,7 +486,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -514,7 +507,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -560,7 +553,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr)]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -582,7 +574,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -631,7 +623,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -653,7 +644,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -708,7 +699,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -730,7 +720,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -781,7 +771,6 @@ class FlowService extends AdminBaseService } return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows]); - } catch (ValidateException $validateException) { // 参数校验失败 $message = $validateException->getError(); @@ -806,7 +795,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -877,7 +866,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -948,7 +937,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1019,7 +1008,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1090,7 +1079,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1160,7 +1149,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1229,7 +1218,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1298,7 +1287,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1367,7 +1356,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1382,8 +1371,8 @@ class FlowService extends AdminBaseService if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; - $market_type=intval($param['market_type']); - $table_obj=(new IPOService())->getStockModel($market_type); + $market_type = intval($param['market_type']); + $table_obj = (new IPOService())->getStockModel($market_type); if (empty($table_obj)) { return $this->toData('1', '数据异常'); } @@ -1426,7 +1415,7 @@ class FlowService extends AdminBaseService $message = $validateException->getError(); return $this->toData('1', $message); } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(),$exception->getTrace()]); + return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); } } @@ -1443,7 +1432,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1514,7 +1503,7 @@ class FlowService extends AdminBaseService if (!empty($param['user_no'])) { $user = UserModel::where('user_no', $param['user_no'])->find(); if (empty($user)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [],]); } $userId = $user['user_id']; } @@ -1570,4 +1559,4 @@ class FlowService extends AdminBaseService return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); } } -} \ No newline at end of file +} diff --git a/app/admin/service/RechargeService.php b/app/admin/service/RechargeService.php index 0f44412c..b8e802be 100644 --- a/app/admin/service/RechargeService.php +++ b/app/admin/service/RechargeService.php @@ -59,7 +59,6 @@ class RechargeService extends AdminBaseService $total = RechargeApplyModel::where($where)->where($whereU)->count(); // 统计 充值成功 $sum = RechargeApplyModel::where($where)->where($whereU)->where('status', 1)->sum('recharge_num'); - $groupSum = RechargeApplyModel::where($where)->where($whereU)->where('status', 1)->field('account_type, SUM(recharge_num) AS recharge_num')->group('recharge_num')->select(); $rows = []; @@ -92,7 +91,7 @@ class RechargeService extends AdminBaseService } } - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'sum' => $sum . 'USD', 'extend' => $statusList, 'groupSum'=>$groupSum]); + return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'sum' => $sum . 'USD', 'extend' => $statusList,'groupSum'=>$groupSum]); } catch (\Exception $exception) { return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); } diff --git a/app/admin/service/VideoService.php b/app/admin/service/VideoService.php index 8e44d60e..080c58cf 100644 --- a/app/admin/service/VideoService.php +++ b/app/admin/service/VideoService.php @@ -1,5 +1,7 @@ toData('400', 'Missing param id'); } - if (empty($param['title']) || empty($param['cover_url']) || empty($param['state']) || empty($param['video_collection']) || empty($param['video_type'])) { + if (empty($param['title']) || empty($param['cover_url']) || !in_array($param['state'], [0, 1]) || empty($param['video_collection']) || empty($param['video_type'])) { return $this->toData('400', '参错错误'); } $ckInfo = VideoOnDemandModel::where('id', $param['id'])->find(); @@ -120,7 +122,7 @@ class VideoService extends AdminBaseService if (empty($param['word'])) { return $this->toData('400', '参错错误'); } - $blockedWord = BlockedWordModel::where(['word'=>$param['word']])->find(); + $blockedWord = BlockedWordModel::where(['word' => $param['word']])->find(); if (!empty($blockedWord)) { return $this->toData('400', '已存在相同屏蔽词'); } @@ -143,7 +145,7 @@ class VideoService extends AdminBaseService if (empty($param['id']) || empty($param['word'])) { return $this->toData('400', '参错错误'); } - $blockedWord = BlockedWordModel::where(['id'=>$param['id']])->find(); + $blockedWord = BlockedWordModel::where(['id' => $param['id']])->find(); if (empty($blockedWord)) { return $this->toData('400', '数据不存在'); } @@ -162,7 +164,7 @@ class VideoService extends AdminBaseService if (empty($param['id'])) { return $this->toData('400', '参错错误'); } - $blockedWord = BlockedWordModel::where(['id'=>$param['id']])->find(); + $blockedWord = BlockedWordModel::where(['id' => $param['id']])->find(); if (empty($blockedWord)) { return $this->toData('400', '数据不存在'); } @@ -173,5 +175,4 @@ class VideoService extends AdminBaseService return $this->toData('500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); } } - } diff --git a/app/admin/service/setting/BlockStockService.php b/app/admin/service/setting/BlockStockService.php index b2cbf3b6..b6e58ded 100644 --- a/app/admin/service/setting/BlockStockService.php +++ b/app/admin/service/setting/BlockStockService.php @@ -51,7 +51,6 @@ class BlockStockService extends AdminBaseService $list = $query->order('id', 'desc')->page($param['page'], $param['limit'])->select(); $total = $totalQuery->order('id', 'desc')->count(); - return $this->toData('0', 'SUCCESS', ['list' => $list, 'total' => $total, 'extend' => [ // 'tape_list' => StockBlockListModel::$tapeList, // 'stock_type_list' => StockBlockListModel::$typeList, @@ -302,7 +301,8 @@ class BlockStockService extends AdminBaseService } // 可出售时间时间 - if (empty($param['today_add']) || !is_numeric($param['today_add'])) { +// if (empty($param['today_add']) || !is_numeric($param['today_add'])) { + if (!is_numeric($param['today_add'])) { return $this->toData('1', 'T+n 无效'); } @@ -350,7 +350,7 @@ class BlockStockService extends AdminBaseService return $this->toData('0', 'SUCCESS'); } catch (\Exception $exception) { - return $this->toData('0', '系统繁忙', [$exception->getMessage()]); + return $this->toData('0', '系统繁忙', [$exception->getMessage(), $exception->getTrace()]); } } diff --git a/app/admin/service/setting/IPOService.php b/app/admin/service/setting/IPOService.php index 2af35e5f..e85404d4 100644 --- a/app/admin/service/setting/IPOService.php +++ b/app/admin/service/setting/IPOService.php @@ -32,12 +32,10 @@ use app\model\StockSgdListModel; use app\model\StockThaListModel; use app\model\UserArrearsModel; use app\model\UserModel; -use app\model\UserUsPreStockOrderModel; use think\exception\ValidateException; use think\facade\Db; use think\facade\Log; use think\facade\Queue; -use function app\admin\service\getTreeMenu; class IPOService extends AdminBaseService { @@ -65,7 +63,8 @@ class IPOService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => [ 'tape_list' => $stockTypeList['tape'], 'stock_type_list' => $stockTypeList['type'], - 'symbol' => $table_obj['stock_id']]]); + 'symbol' => $table_obj['stock_id'] + ]]); } $userId = $user['user_id']; } @@ -76,24 +75,31 @@ class IPOService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => [ 'tape_list' => $stockTypeList['tape'], 'stock_type_list' => $stockTypeList['type'], - 'symbol' => $table_obj['stock_id']]]); + 'symbol' => $table_obj['stock_id'] + ]]); } // 未删除 $where[] = [ - 'is_delete', '=', 1 + 'is_delete', + '=', + 1 ]; // 股票号 if (!empty($param['stock_code']) && is_string($param['stock_code'])) { $where[] = [ - 'stock_code', 'like', '%' . $param['stock_code'] + 'stock_code', + 'like', + '%' . $param['stock_code'] ]; } // 状态 if (!empty($param['status']) && in_array($param['status'], [1, 2])) { $where[] = [ - 'status', '=', $param['status'] + 'status', + '=', + $param['status'] ]; } @@ -291,9 +297,9 @@ class IPOService extends AdminBaseService } // 后支付截止时间 > 中签时间 && 后支付截止时间 < 上市时间 -// if ($param['is_post_pay'] == 2 && (empty($param['pay_deadline_time']) || strtotime($param['pay_deadline_time']) <= strtotime($param['get_time']) || strtotime($param['pay_deadline_time']) >= strtotime($param['open_time']))) { -// return $this->toData('1', '后支付截止时间 要大于 中签时间 且 后支付截止时间 要小于 上市时间'); -// } + // if ($param['is_post_pay'] == 2 && (empty($param['pay_deadline_time']) || strtotime($param['pay_deadline_time']) <= strtotime($param['get_time']) || strtotime($param['pay_deadline_time']) >= strtotime($param['open_time']))) { + // return $this->toData('1', '后支付截止时间 要大于 中签时间 且 后支付截止时间 要小于 上市时间'); + // } if (strpos($param['stock_code'], ':') !== false) { $param['stock_code'] = explode(':', $param['stock_code'])[1]; @@ -476,9 +482,9 @@ class IPOService extends AdminBaseService } // 后支付截止时间 > 中签时间 && 后支付截止时间 < 上市时间 -// if ($param['is_post_pay'] == 2 && (empty($param['pay_deadline_time']) || strtotime($param['pay_deadline_time']) <= strtotime($param['get_time']) || strtotime($param['pay_deadline_time']) >= strtotime($param['open_time']))) { -// return $this->toData('1', '后支付截止时间 要大于 中签时间 且 后支付截止时间 要小于 上市时间'); -// } + // if ($param['is_post_pay'] == 2 && (empty($param['pay_deadline_time']) || strtotime($param['pay_deadline_time']) <= strtotime($param['get_time']) || strtotime($param['pay_deadline_time']) >= strtotime($param['open_time']))) { + // return $this->toData('1', '后支付截止时间 要大于 中签时间 且 后支付截止时间 要小于 上市时间'); + // } if (strpos($param['stock_code'], ':') !== false) { $param['stock_code'] = explode(':', $param['stock_code'])[1]; @@ -563,7 +569,6 @@ class IPOService extends AdminBaseService } catch (\Exception $exception) { return $this->toData('0', '系统繁忙', [$exception->getMessage()]); } - } /** @@ -600,7 +605,6 @@ class IPOService extends AdminBaseService } else { return $this->toData('1', 'FAIL'); } - } catch (\Exception $exception) { return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } @@ -624,7 +628,6 @@ class IPOService extends AdminBaseService if (isset($param['is_real']) && is_numeric($param['is_real']) && $param['is_real'] == '2') { $isReal = 2; } - $preInStock = Db::table($table_obj['stock_table'])->where('id', $param['id'])->where('is_delete', 1)->find(); if (empty($preInStock)) { return $this->toData('1', '主键 无效'); @@ -637,9 +640,9 @@ class IPOService extends AdminBaseService } // 未签名 上市 -// if ($preInStock['open_status'] != 1 || strtotime($preInStock['get_time']) < date('Y-m-d H:i:s')) { -// return $this->toData('1', '无法操作'); -// } + // if ($preInStock['open_status'] != 1 || strtotime($preInStock['get_time']) < date('Y-m-d H:i:s')) { + // return $this->toData('1', '无法操作'); + // } if ($preInStock['open_status'] != 1) { return $this->toData('1', '无法操作'); } @@ -647,9 +650,11 @@ class IPOService extends AdminBaseService Db::startTrans(); // 修改股票状态 - $num = Db::table($table_obj['stock_table'])->where('id', $preInStock['id'])->update(['open_status' => 2, + $num = Db::table($table_obj['stock_table'])->where('id', $preInStock['id'])->update([ + 'open_status' => 2, 'open_time' => date('Y-m-d H:i:s'), - 'update_time' => date('Y-m-d H:i:s')]); + 'update_time' => date('Y-m-d H:i:s') + ]); if ($num <= 0) { Db::rollback(); return $this->toData('1', '股票状态修改失败'); @@ -719,11 +724,11 @@ class IPOService extends AdminBaseService Db::commit(); // 查询bot_user_us_pre_stock_order表,即所有申购了该股票的订单记录,修改其status状态为3 - Log::info("新股上市 - 修改股票申购状态:pre_stock_id = ".$preInStock['id']); - $stockOrderList = UserUsPreStockOrderModel::where(['pre_stock_id'=>$preInStock['id']])->select()->toArray(); + Log::info("新股上市 - 修改股票申购状态:pre_stock_id = " . $preInStock['id']); + $stockOrderList = Db::table($table_obj['order_table'])->where(['pre_stock_id' => $preInStock['id']])->select()->toArray(); if (!empty($stockOrderList)) { foreach ($stockOrderList as $itm) { - UserUsPreStockOrderModel::update(['status'=>3], ['id'=>$itm['id']]); + Db::table($table_obj['order_table'])->where('id', $itm['id'])->update(['status' => 3]); } } @@ -817,7 +822,6 @@ class IPOService extends AdminBaseService ], 'sendGo'); } return $this->toData('0', 'SUCCESS'); - } @@ -874,7 +878,8 @@ class IPOService extends AdminBaseService 'get_amount' => $get_amount, 'get_fee' => $get_fee, 'get_time' => $now, - 'update_time' => $now]); + 'update_time' => $now + ]); if ($num <= 0) { Db::rollback(); @@ -950,7 +955,6 @@ class IPOService extends AdminBaseService } } } - } // 更新股票数据 $bool = Db::table($table_obj['stock_table'])->where('id', $preStock['id'])->update(['sign_status' => 1, 'update_time' => $now]); @@ -961,7 +965,6 @@ class IPOService extends AdminBaseService } // 提交事务 Db::commit(); - } catch (\Exception $exception) { Db::rollback(); trace("股票签名失败-exception 股票市场:" . $market_type . $exception->getMessage(), 'error'); @@ -1331,7 +1334,8 @@ class IPOService extends AdminBaseService /** * 取消上市 */ - public function cancelIPO($market_type,$param){ + public function cancelIPO($market_type, $param) + { $table_obj = $this->getStockModel($market_type); $redis = $this->getRedis(); if (empty($table_obj)) { @@ -1344,60 +1348,60 @@ class IPOService extends AdminBaseService ->where('sign_status', 1) ->where('open_status', 1) ->find(); - if(empty($preStock)){ + if (empty($preStock)) { return $this->toData('1', '数据异常'); } //1、2已支付,5、6未支付可能存在借款 $order_list = Db::table($table_obj['order_table'])->where('pre_stock_id', $param['pre_id']) - ->whereIn('status',[1,2,5,6]) + ->whereIn('status', [1, 2, 5, 6]) ->select(); $now = date('Y-m-d H:i:s'); - foreach ($order_list as $order){ + foreach ($order_list as $order) { Db::startTrans(); - $total_num=$order['amount']+$order['fee']; + $total_num = $order['amount'] + $order['fee']; //查询订单有没有欠款 - $user_arrears=UserArrearsModel::where('order_no', $order['order_no'])->where('status',0)->where('user_id', $order['user_id'])->find(); - if($user_arrears){ - $user_arrears=$user_arrears->toArray(); - if($user_arrears['is_add']==1){ + $user_arrears = UserArrearsModel::where('order_no', $order['order_no'])->where('status', 0)->where('user_id', $order['user_id'])->find(); + if ($user_arrears) { + $user_arrears = $user_arrears->toArray(); + if ($user_arrears['is_add'] == 1) { //扣除冻结,不加可用 $updateNum = Db::table($table_obj['user_table'])->where('stock_id', $table_obj['stock_id'])->where('user_id', $order['user_id']) ->where('frozen_num', '>=', $total_num) - ->dec('frozen_num',$total_num) + ->dec('frozen_num', $total_num) ->update(['update_time' => $now]); - if(!$updateNum){ + if (!$updateNum) { Db::rollback(); trace('给用户ID:' . $order['user_id'] . "解冻资金异常" . $order['order_no'], 'error'); continue; } } - $update_bool=UserArrearsModel::where('order_no', $order['order_no'])->where('user_id', $order['user_id']) - ->update([ - 'update_time'=>$now, - 'status'=>1 - ]); - if(!$update_bool){ + $update_bool = UserArrearsModel::where('order_no', $order['order_no'])->where('user_id', $order['user_id']) + ->update([ + 'update_time' => $now, + 'status' => 1 + ]); + if (!$update_bool) { Db::rollback(); trace('给用户ID:' . $order['user_id'] . "更新贷款订单异常" . $order['order_no'], 'error'); continue; } - $status=8; - }else{ + $status = 8; + } else { //扣除冻结 加可用 $updateNum = Db::table($table_obj['user_table'])->where('stock_id', $table_obj['stock_id'])->where('user_id', $order['user_id']) ->where('frozen_num', '>=', $total_num) ->inc('usable_num', $total_num) - ->dec('frozen_num',$total_num) + ->dec('frozen_num', $total_num) ->update(['update_time' => $now]); - if(!$updateNum){ + if (!$updateNum) { Db::rollback(); trace('给用户ID:' . $order['user_id'] . "解冻资金异常" . $order['order_no'], 'error'); continue; } - $status=7; + $status = 7; } //更新状态 $bool_status = Db::table($table_obj['order_table'])->where('id', $order['id'])->update([ @@ -1415,12 +1419,12 @@ class IPOService extends AdminBaseService Db::commit(); } $bool = Db::table($table_obj['stock_table'])->where('id', $param['pre_id'])->update([ - 'is_delete'=>2, + 'is_delete' => 2, 'update_time' => $now ]); - if($bool){ + if ($bool) { return $this->toData('0', 'SUCCESS'); - }else{ + } else { return $this->toData('1', '数据异常'); } } @@ -1626,16 +1630,16 @@ class IPOService extends AdminBaseService break; case 19: $result = [ -// 'stock_table' => $prefix . 'pre_jp_stock', -// 'order_table' => $prefix . 'user_jp_pre_stock_order', + // 'stock_table' => $prefix . 'pre_jp_stock', + // 'order_table' => $prefix . 'user_jp_pre_stock_order', 'user_table' => $prefix . 'user_forex', 'log_table' => $prefix . 'user_forex_log', 'list_table' => $prefix . 'forex_list', 'trade_table' => $prefix . 'forex_trade', -// 'give_order_table' => $prefix . 'user_jp_give_stock_order', + // 'give_order_table' => $prefix . 'user_jp_give_stock_order', 'redis_key' => 'FOREX:STOCK:LIST:', 'stock_id' => 'FOREX', -// 'country' => 'Japan', + // 'country' => 'Japan', 'check' => 'forex_stock_', ]; break; @@ -1659,8 +1663,8 @@ class IPOService extends AdminBaseService 'trade_table' => $prefix . 'gold_futures_trade', 'redis_key' => 'GoldFutures:STOCK:LIST:', 'stock_id' => 'USD', // 黄金期货资产表中contract_id对应的值,即 bot_user_gold_futures.contract_id -// 'country' => '', -// 'check' => '', + // 'country' => '', + // 'check' => '', ]; break; default: @@ -1758,7 +1762,7 @@ class IPOService extends AdminBaseService case 20: // 印度股指 $result = [ - 'tape' =>[ + 'tape' => [ 1 => "NSE", 2 => "BSE" ], @@ -1778,5 +1782,4 @@ class IPOService extends AdminBaseService } return $result; } - } diff --git a/app/command/ApiLogCommand.php b/app/command/ApiLogCommand.php new file mode 100644 index 00000000..7a88d676 --- /dev/null +++ b/app/command/ApiLogCommand.php @@ -0,0 +1,57 @@ +setName('api_log') + ->setDescription('the api_log command'); + } + /** + * Execute the console command. + * + * @param Input $input + * @param Output $output + * @return void + */ + protected function execute(Input $input, Output $output) + { + while (true) { + try { + $redis = Cache::store('redis')->handler(); + $result = $redis->blpop(['api_log'], 5); + + if ($result) { + $logData = json_decode($result[1], true); + if (!is_array($logData) || empty($logData)) { + continue; + } + if ($logData) { + $logData['params'] = json_encode($logData['params'] ?? [], JSON_UNESCAPED_UNICODE); + $logData['response'] = json_encode($logData['response'] ?? [], JSON_UNESCAPED_UNICODE); + + ApiLogModel::create($logData); + } + } else { + // 如果没有数据,休眠一段时间再继续 + sleep(10); + } + } catch (\Throwable $e) { + Log::error('ApiLogCommand error: ' . $e->getMessage()); + sleep(3); + } + } + } +} diff --git a/app/home/controller/User.php b/app/home/controller/User.php index 3f2cdb04..ba474b14 100644 --- a/app/home/controller/User.php +++ b/app/home/controller/User.php @@ -32,6 +32,20 @@ class User extends HomeBaseController return json($returnData); } + // 使用vip兑换码兑换vip + public function redeemVip(): Json + { + $returnData = (new UserService())->redeemVip($this->request->userId, $this->request->post()); + return json($returnData); + } + + // 观看视频记录 + public function watchVideo(): Json + { + $returnData = (new UserService())->watchVideo($this->request->userId, $this->request->post()); + return json($returnData); + } + public function getAnchorForAgent(): Json { $returnData = (new UserService())->getAnchorForAgent($this->request->userId); diff --git a/app/home/lang/zh-cn.php b/app/home/lang/zh-cn.php index 589f419c..bb418576 100644 --- a/app/home/lang/zh-cn.php +++ b/app/home/lang/zh-cn.php @@ -40,7 +40,8 @@ return [ 'chat_group_is_empty' => '聊天群组为空', 'missing_user_id' => '缺少用户ID', 'data_configuration_error' => '数据配置错误', - 'user_usd_balance_is_insufficient' => '用户余额不足', + 'user_usd_balance_is_insufficient' => '用户美元余额不足', + 'user_balance_is_insufficient' => '用户余额不足', 'vip_expiration_time_error' => 'VIP过期时间错误', 'anchor_information_is_empty' => '主播信息为空', 'avatar_information_error' => '头像信息错误', @@ -68,4 +69,4 @@ return [ 'setting_error' => '设置错误', 'create_order_error' => '创建订单错误', 'success' => '成功', -]; +]; \ No newline at end of file diff --git a/app/home/lang/zh-jp.php b/app/home/lang/zh-jp.php index 293dbfca..0e70e885 100644 --- a/app/home/lang/zh-jp.php +++ b/app/home/lang/zh-jp.php @@ -41,7 +41,8 @@ return [ 'chat_group_is_empty' => 'チャットグループは空です', 'missing_user_id' => 'ユーザーIDがありません', 'data_configuration_error' => 'データ構成エラー', - 'user_usd_balance_is_insufficient' => 'ユーザー残高が不足しています', + 'user_usd_balance_is_insufficient' => 'USDでのユーザー残高が不足しています', + 'user_balance_is_insufficient' => 'ユーザー残高が不足しています', 'vip_expiration_time_error' => 'VIP有効期限エラー', 'anchor_information_is_empty' => 'アンカー情報が空です', 'avatar_information_error' => 'アバター情報エラー', diff --git a/app/home/lang/zh-us.php b/app/home/lang/zh-us.php index dbbcc2bf..259209b2 100644 --- a/app/home/lang/zh-us.php +++ b/app/home/lang/zh-us.php @@ -41,7 +41,8 @@ return [ 'chat_group_is_empty' => 'Chat group is empty', 'missing_user_id' => 'Missing User ID', 'data_configuration_error' => 'Data configuration error', - 'user_usd_balance_is_insufficient' => 'The user balance is insufficient', + 'user_usd_balance_is_insufficient' => 'The user USD balance is insufficient', + 'user_balance_is_insufficient' => 'The user balance is insufficient', 'vip_expiration_time_error' => 'VIP expiration time error', 'anchor_information_is_empty' => 'The anchor information is empty', 'avatar_information_error' => 'Avatar information error', diff --git a/app/home/middleware/ApiLogMiddleware.php b/app/home/middleware/ApiLogMiddleware.php new file mode 100644 index 00000000..e0a51c82 --- /dev/null +++ b/app/home/middleware/ApiLogMiddleware.php @@ -0,0 +1,76 @@ +method(true) === 'OPTIONS') { + return response()->send(); + } + $path = $request->pathinfo(); + $shouldLog = in_array($path, $this->logRoutes); + $logData = []; + if ($shouldLog) { + $ip = (new BaseHomeService())->getClientRealIp(); + $params = $request->param(); + $logData = [ + 'url' => $request->url(), + 'method' => $request->method(), + 'params' => $params, + 'ip' => $ip, + ]; + // 如果登录了,记录 user_id + if (!empty($request->user_id)) { + $logData['user_id'] = $request->user_id; + } + } + + $response = $next($request); + + if ($shouldLog && $response instanceof Response) { + + $logData['response'] = $response->getData(); + } + //写入redis + if (!empty($logData)) { + $logData['user_agent'] = $request->header('user-agent'); + $logData['created_at'] = date('Y-m-d H:i:s'); + // 记录日志到 Redis + \think\facade\Cache::store('redis')->lpush('api_log', json_encode($logData)); + } + return $response; + + } +} diff --git a/app/home/middleware/CheckUserMiddleware.php b/app/home/middleware/CheckUserMiddleware.php new file mode 100644 index 00000000..f8b71561 --- /dev/null +++ b/app/home/middleware/CheckUserMiddleware.php @@ -0,0 +1,47 @@ +method(true) === 'OPTIONS') { + return response()->send(); + } + // 设置多语言 + Config::set(['default_lang' => 'zh-jp'], 'lang'); // P2 默认设置日语 + $request->lang = Config::get('lang.default_lang'); + $header = $request->header(); + if (isset($header['language'])) { + $lang_list = Config::get('lang.allow_lang_list'); + $lang = strtolower($header['language']); + if (in_array($lang, $lang_list)) { + Lang::setLangSet($lang); + $request->lang = $lang; + } + } + + if (!empty($header['token']) && is_string($header['token'])) { + $tokenUserKey = 'TOKEN:USER:' . $header['token']; + $userId = Cache::store('redis')->get($tokenUserKey); + if ($userId && $userId >= 0) { + $request->userId = $userId; + } + } + + return $next($request); + } +} diff --git a/app/home/route/app.php b/app/home/route/app.php index 72bc886d..32e02660 100644 --- a/app/home/route/app.php +++ b/app/home/route/app.php @@ -21,8 +21,8 @@ $header = [ /** * 不需要登陆的路由 */ -Route::group('/',function (){ - Route::group('/',function (){ +Route::group('/', function () { + Route::group('/', function () { // 邮箱 登录 Route::post('/email_login', 'Login/loginEmail'); // 发送邮件 @@ -101,7 +101,7 @@ Route::group('/',function (){ //数字币充值 Route::post('pay_notify', 'Pay/payNotify')->name('pay_notify'); //充值通知接口 Route::post('order_confirm', 'Pay/OrderConfirm')->name('order_confirm'); //充值通知接口 - Route::get('get_wallet', 'Pay/wallet')->name('get_wallet');//获取钱包地址 + Route::get('get_wallet', 'Pay/wallet')->name('get_wallet'); //获取钱包地址 Route::post('htpay_notify', 'Pay/htPayNotify')->name('htpay_notify'); //充值通知接口 Route::post('arpay_notify', 'Pay/arPayNotify')->name('arpay_notify'); //充值通知接口 @@ -140,9 +140,10 @@ Route::group('/',function (){ //基金 Route::post('fund/index', 'Fund/index'); Route::post('auto_login', 'Login/autoLogin'); + Route::post('user/user_access_log', 'User/userAccessLog')->middleware(\app\home\middleware\CheckUserMiddleware::class); //记录用户访问每个页面日志 // 需要登陆的操作 - Route::group('/',function (){ + Route::group('/', function () { // 需要防止重复操作的路由 Route::group('', function () { // 设置国家码 @@ -202,6 +203,9 @@ Route::group('/',function (){ Route::post('user/info', 'User/getUserInfo'); Route::post('user/purchase_vip', 'User/purchaseVip'); //用户购买VIP Route::post('user/purchase_vip_log', 'User/purchaseVipLog'); //用户购买VIP记录列表 + Route::post('user/redeem_vip', 'User/redeemVip'); //使用vip兑换码兑换vip + // 观看点播视频记录 + Route::post('user/watch_video', 'User/watchVideo'); // 获取用户的代理创建的群聊信息 Route::post('user/get_anchor_for_agent', 'User/getAnchorForAgent'); // 获取登陆记录 @@ -212,7 +216,7 @@ Route::group('/',function (){ Route::post('user/apply_test', 'User/applyTest'); Route::post('user/test_login', 'User/testLogin'); Route::post('user/formal_login', 'User/formalLogin'); - Route::post('user/user_access_log', 'User/userAccessLog'); //记录用户访问每个页面日志 + Route::post('payment_list', 'Pay/payChannel'); //获取充值渠道 Route::post('user_recharge', 'Pay/rechargeApply')->middleware(\app\home\middleware\RepeatOperateMiddleware::class); // 用户提交充值订单 @@ -257,7 +261,7 @@ Route::group('/',function (){ Route::post('trade_fee', 'Market/tradeFee'); Route::post('contract_setting', 'Market/ContractSetting'); - Route::post('team_collect', 'Team/userTeamCollect');// 获取团队汇总 + Route::post('team_collect', 'Team/userTeamCollect'); // 获取团队汇总 Route::post('team_back', 'Team/userTeamBack'); // 获取团队人数 Route::post('team_list', 'Team/userTeamList'); // 获取团队人数 // 根据邮箱重新设置密码 @@ -298,11 +302,5 @@ Route::group('/',function (){ Route::post('stock/stock_analysis', 'Stock/stockAnalysis'); // 股票分析 })->middleware(\app\home\middleware\AuthMiddleware::class); - -})->allowCrossDomain($header); - - - - - - +})->allowCrossDomain($header) + ->middleware(\app\home\middleware\ApiLogMiddleware::class); diff --git a/app/home/service/BaseHomeService.php b/app/home/service/BaseHomeService.php index 4794924f..3bf923fa 100644 --- a/app/home/service/BaseHomeService.php +++ b/app/home/service/BaseHomeService.php @@ -76,6 +76,7 @@ class BaseHomeService { $code = random_int(1000, 9999); $subject = "【Acm】あなたの認証コード[$code],有効10分以内"; + // $subject = "your code is [$code], valid for 5 minutes"; return ['subject' => $subject, 'code' => $code]; } @@ -999,7 +1000,17 @@ class BaseHomeService } else { $result = []; foreach ($type_arr as $v) { - $result[$v] = $type_list[$v]; + $result[$v] = $type_list[$v] ?? [ + 'zh-cn' => '未知类型', + 'zh-zh' => '未知类型', + 'zh-us' => 'Unknown Type', + 'zh-cs' => 'Neznámý typ', + 'zh-sp' => 'Tipo desconocido', + 'zh-eu' => 'Tipo Desconocido', + 'zh-th' => 'ประเภทที่ไม่รู้จัก', + 'zh-in' => 'अज्ञात प्रकार', + 'zh-jp' => '不明なタイプ' + ]; } return $result; } diff --git a/app/home/service/LoginService.php b/app/home/service/LoginService.php index ab63b92c..a3d5d0b6 100644 --- a/app/home/service/LoginService.php +++ b/app/home/service/LoginService.php @@ -193,7 +193,7 @@ class LoginService extends BaseHomeService $userId = $regUser->user_id; // 生成钱包地址 - (new UserService())->doRegInitUserInfo($userId, $parentUserId); + // (new UserService())->doRegInitUserInfo($userId, $parentUserId); // 请求聊天服务,注册聊天账号 $chatData = [ 'Username' => $userNo, @@ -372,7 +372,10 @@ class LoginService extends BaseHomeService if ($this->checkForbidNation($param['nation'])) { return $this->toData('500', lang('unsupported_country_or_region')); } - + //日本手机号 不加国家码是10位 + if (strlen($param['phone']) != 10) { + return $this->toData('500', lang('unsupported_country_or_region')); + } // 判断国家码是否有效 $nationExists = CountryModel::checkCodeExists($param['nation']); if (!$nationExists) { @@ -452,17 +455,15 @@ class LoginService extends BaseHomeService // 校验验证码 $mobile = $param['nation'] . $param['phone']; $smsKey = 'DB:USER:UNLOGIN:SMS_CODE:' . $mobile; - if ($param['sms_code'] != 8888) { // 方便测试,8888为万能验证码 - if (!$this->checkCode($smsKey, $param['sms_code'])) { + if (!$this->checkCode($smsKey, $param['sms_code'])) { + //注册验证码 + $reg_key = "USER:REG:CODE"; + if (!$this->checkCode($reg_key, $param['sms_code'])) { return $this->toData('500', lang('incorrect_verification_code')); - //注册验证码 - // $reg_key = "USER:REG:CODE"; - // if (!$this->checkCode($reg_key, $param['sms_code'])) { - // return $this->toData('100300', 'The verification code is incorrect.', []); - // } } } + // 手机号是否已经存在 $phoneExists = UserModel::checkPhoneExists($param['phone']); if ($phoneExists) { @@ -656,11 +657,15 @@ class LoginService extends BaseHomeService // 验证短信验证码 $mobile = $param['nation'] . $param['phone']; $smsKey = 'DB:USER:UNLOGIN:SMS_CODE:' . $mobile; - if ($param['sms_code'] != 8888) { - if (!$this->checkCode($smsKey, $param['sms_code'])) { + + if (!$this->checkCode($smsKey, $param['sms_code'])) { + //注册验证码 + $reg_key = "USER:REG:CODE"; + if (!$this->checkCode($reg_key, $param['sms_code'])) { return $this->toData('500', lang('incorrect_verification_code')); - }; - } + } + }; + // 查找手机号 $userId = UserModel::getUserIdByNationAndPhone($param['nation'], $param['phone']); diff --git a/app/home/service/UserService.php b/app/home/service/UserService.php index d370c2f4..67a7196e 100644 --- a/app/home/service/UserService.php +++ b/app/home/service/UserService.php @@ -28,7 +28,8 @@ use app\model\UserStockJpLogModel; use app\model\UserStockJpModel; use app\model\UserStockLogModel; use app\model\UserStockModel; -use app\model\UserVerifyLogModel; +use app\model\VipCodeModel; +use app\model\WatchVideoLogModel; use app\utility\Jwt; use app\utility\UnqId; use think\exception\ValidateException; @@ -94,14 +95,14 @@ class UserService extends BaseHomeService */ private function initUserWallet(int $user_id) { - if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + if (env('ACCOUT_TYPE.ALL_IN_ONE') == 1) { UserMoneyModel::InsertUserMoneyk([ 'user_id' => $user_id, 'stock_id' => 'USD', 'usable_num' => 0, 'frozen_num' => 0, ]); - }else{ + } else { if (env('FEATURE.HAS_STOCK_US')) { UserStockModel::InsertUserStock([ 'user_id' => $user_id, @@ -127,8 +128,6 @@ class UserService extends BaseHomeService ]); } } - - } /** @@ -163,7 +162,7 @@ class UserService extends BaseHomeService // 获取头像 $headPath = env('USER.DEFAULT_HEAD_IMG_PATH'); if ($info['head_img_id'] > 0) { - $s3Info = AwsS3Model::where(['id'=>$info['head_img_id']])->find(); + $s3Info = AwsS3Model::where(['id' => $info['head_img_id']])->find(); if (!empty($s3Info)) { $headPath = $s3Info->s3_url; } @@ -175,10 +174,10 @@ class UserService extends BaseHomeService $key = 'LEVERAGE:0'; $leverageNum = Cache::store('redis')->get($key); } - $leverageNum= empty($leverageNum) ? 1: $leverageNum; + $leverageNum = empty($leverageNum) ? 1 : $leverageNum; // 查询用户的chat_uuid - $userChatInfo = UserChatLinkModel::where(['user_id'=>$userId,'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); + $userChatInfo = UserChatLinkModel::where(['user_id' => $userId, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); $userChatUuid = ""; $userChatName = ""; if (!empty($userChatInfo)) { @@ -189,7 +188,7 @@ class UserService extends BaseHomeService $customerChatUuid = ""; $customerChatName = ""; if (!empty($info['customer_id'])) { - $customerChatInfo = UserChatLinkModel::where(['user_id'=>$info['customer_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $customerChatInfo = UserChatLinkModel::where(['user_id' => $info['customer_id'], 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if ($customerChatInfo) { $customerChatUuid = $customerChatInfo->chat_uuid; $customerChatName = $customerChatInfo->chat_name; @@ -199,7 +198,7 @@ class UserService extends BaseHomeService $group_chat_name = ""; $group_chat_uuid = ""; if ($info['agent_id']) { - $agentGroup = UserChatGroupModel::where(['user_id'=>$info['agent_id']])->find(); + $agentGroup = UserChatGroupModel::where(['user_id' => $info['agent_id']])->find(); if (empty($agentGroup)) { return $this->toData('500', lang('chat_group_is_empty')); } @@ -212,18 +211,18 @@ class UserService extends BaseHomeService $groupLeaderChatUuid = 0; $groupLeaderChatName = ""; if ($groupLeader) { - $groupLeaderChatInfo = UserChatLinkModel::where(['user_id'=>$groupLeader->group_leader_id, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); + $groupLeaderChatInfo = UserChatLinkModel::where(['user_id' => $groupLeader->group_leader_id, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); if ($groupLeaderChatInfo) { $groupLeaderChatUuid = $groupLeaderChatInfo->chat_uuid; $groupLeaderChatName = $groupLeaderChatInfo->chat_name; } } - // 检测用户是否为有效VIP + // 检测用户是否为有效VIP [判断规则 - 用户购买过VIP, 每个VIP有效期30天] $isVip = false; $vipExpire = ""; //vip到期时间 $vipType = ""; // vip类型:青铜、白金、钻石; (管理端赠送的vip,以及vip兑换码兑换的都是显示免费标签) - $purchaseInfo = PurchaseVipModel::where(['user_id'=>$userId])->find(); + $purchaseInfo = PurchaseVipModel::where(['user_id' => $userId])->find(); if (!empty($purchaseInfo)) { if ($purchaseInfo->expire >= date("Y-m-d H:i:s")) { $isVip = true; @@ -233,23 +232,20 @@ class UserService extends BaseHomeService $vipType = "免费"; } else if ($purchaseInfo->vip_type == 1) { $vipType = "青铜"; - } else if ($purchaseInfo->vip_type == 2) { + } else if ($purchaseInfo->vip_type == 2) { $vipType = "白金"; - } else if ($purchaseInfo->vip_type == 3) { + } else if ($purchaseInfo->vip_type == 3) { $vipType = "钻石"; } } - // 用户是实名信息 - $verifyName = ""; - $verifySurname = ""; - $verifyInfo = UserVerifyLogModel::where(['user_id'=>$userId])->find(); - if (!empty($verifyInfo)){ - $verifyName = $verifyInfo->name; - $verifySurname = $verifyInfo->surname; + // 获取用户观看video的最后一个记录ID + $watchVideoLogId = 0; + $watchVideoLog = WatchVideoLogModel::where(['user_id' => $userId])->find(); + if (!empty($watchVideoLog)) { + $watchVideoLogId = $watchVideoLog->video_id; } - // 返回数据 return $this->toData('0', 'Modification successful.', [ 'logo' => $headPath, @@ -270,7 +266,7 @@ class UserService extends BaseHomeService 'country' => $countryName, 'countryId' => $countryId, 'lever_status' => $info['lever_status'], - 'leverage_num' =>$leverageNum, + 'leverage_num' => $leverageNum, 'user_chat_uuid' => $userChatUuid, 'user_chat_name' => $userChatName, 'customer_chat_uuid' => $customerChatUuid, @@ -286,8 +282,7 @@ class UserService extends BaseHomeService 'customer_remark' => $info['customer_remark'], 'label' => $info['label'], 'adjust_channel' => $info['adjust_channel'], - 'verify_name' => $verifyName, - 'verify_surname' => $verifySurname, + 'watch_video_id' => $watchVideoLogId, // 没看过就是0, 看过就返回的最后一次看的video_id ]); } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); @@ -298,7 +293,7 @@ class UserService extends BaseHomeService public function purchaseVip($userId, $param) { try { - if (empty($userId) || empty($param['vip_type']) ) { + if (empty($userId) || empty($param['vip_type'])) { return $this->toData('500', lang('parameter_error')); } $info = UserModel::getFieldsByUserId('trade_password,lever_status,gender,last_name,first_name,real_status,country_id,user_no,nick_name,email,phone_number,country_code,agent_id,is_real,head_img_id,invite_code,is_test_user', $userId); @@ -312,26 +307,27 @@ class UserService extends BaseHomeService } // 购买vip所需的货币类型检测 [产品确定使用美股支付 USD] if (empty($vipPurchaseCfg['stock_id'])) { - return $this->toData('501', lang('data_configuration_error')); + return $this->toData('500', lang('data_configuration_error')); } $stockId = $vipPurchaseCfg['stock_id']; // vip类型配置检测 if (!isset($vipPurchaseCfg[$param['vip_type']])) { - return $this->toData('502', lang('data_configuration_error')); + return $this->toData('500', lang('data_configuration_error')); } $tagVipConfig = $vipPurchaseCfg[$param['vip_type']]; // vip价格检测 if (!isset($tagVipConfig['vip_price']) || $tagVipConfig['vip_price'] <= 0) { - return $this->toData('503', lang('data_configuration_error')); + return $this->toData('500', lang('data_configuration_error')); } // vip有效天数检测 if (!isset($tagVipConfig['vip_day']) || $tagVipConfig['vip_day'] <= 0) { - return $this->toData('504', lang('data_configuration_error')); + return $this->toData('500', lang('data_configuration_error')); } // 查询用户余额是否足够 - $userMoney = UserStockJpModel::where(['user_id'=>$userId,'stock_id'=> $stockId])->find(); + // $userMoney = UserStockModel::where(['user_id'=>$userId,'stock_id'=> $stockId])->find(); + $userMoney = UserStockJpModel::where(['user_id' => $userId, 'stock_id' => $stockId])->find(); if (empty($userMoney)) { - return $this->toData('500', lang('user_usd_balance_is_insufficient')); + return $this->toData('500', lang('user_balance_is_insufficient')); } $userMoneyNum = (int)$userMoney->usable_num; if ($userMoneyNum < $tagVipConfig['vip_price']) { @@ -343,8 +339,9 @@ class UserService extends BaseHomeService // 记录购买vip信息, 扣除用户金额 Db::transaction(function () use ($userId, $userMoneyNum, $vipPrice, $vipDay, $stockId, $vipType) { // 扣除用户金额 - UserStockJpModel::where(['user_id'=>$userId,'stock_id'=>$stockId])->where('usable_num', ">=", $vipPrice)->dec('usable_num', $vipPrice)->update(); + UserStockJpModel::where(['user_id' => $userId, 'stock_id' => $stockId])->where('usable_num', ">=", $vipPrice)->dec('usable_num', $vipPrice)->update(); // 添加用户USD变更日志 + // UserStockLogModel::create([ UserStockJpLogModel::create([ 'user_id' => $userId, 'change_type' => 100, @@ -355,15 +352,15 @@ class UserService extends BaseHomeService 'update_time' => date('Y-m-d H:i:s') ]); // 查询用户是否开通过vip,更新用户vip到期时间 - $vipLog = PurchaseVipModel::where(['user_id'=>$userId])->find(); - $expireTimestamp = strtotime('+'.$vipDay.' day'); + $vipLog = PurchaseVipModel::where(['user_id' => $userId])->find(); + $expireTimestamp = strtotime('+' . $vipDay . ' day'); $expireTime = date("Y-m-d H:i:s", $expireTimestamp); if (!empty($vipLog)) { if (empty($vipLog->expire)) { return $this->toData('500', lang('vip_expiration_time_error')); } if ($vipLog->expire >= date("Y-m-d H:i:s")) { - $expireTimestamp = strtotime('+'.$vipDay.' day', strtotime($vipLog->expire)); + $expireTimestamp = strtotime('+' . $vipDay . ' day', strtotime($vipLog->expire)); $expireTime = date("Y-m-d H:i:s", $expireTimestamp); } $vipLog->expire = $expireTime; @@ -388,7 +385,7 @@ class UserService extends BaseHomeService 'vip_type' => $vipType, ]); }); - return $this->toData('0', 'successful'); + return $this->toData('0', 'successful', []); } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } @@ -401,7 +398,7 @@ class UserService extends BaseHomeService if (!isset($param['page']) || !isset($param['limit'])) { return $this->toData('400', lang('parameter_error')); } - $list = PurchaseVipLogModel::where(['user_id'=>$userId])->order('id', 'desc')->paginate([ + $list = PurchaseVipLogModel::where(['user_id' => $userId])->order('id', 'desc')->paginate([ 'list_rows' => $param['limit'], 'page' => $param['page'], ]); @@ -411,12 +408,84 @@ class UserService extends BaseHomeService 'total' => $list->total(), // 总记录数 'last_page' => $list->lastPage(), // 最后一页页码 ]); - - } catch (\Exception $exception) { + } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getLine(), $exception->getMessage(), $exception->getTrace()]); } } + // 使用vip兑换码兑换vip + public function redeemVip($userId, $param) + { + try { + if (empty($param['vip_code'])) { + return $this->toData('500', lang('missing param vip_code')); + } + $info = UserModel::where(['user_id' => $userId])->find(); + if (empty($info)) { + return $this->toData('500', lang('user_does_not_exist')); + } + // 获取vip_code信息 + $vipCodeInfo = VipCodeModel::where(['vip_code' => $param['vip_code']])->find(); + if (empty($vipCodeInfo) || $vipCodeInfo->status != 0) { + return $this->toData('500', lang('VIP引き換えコードが無効です')); + } + + $expireTimestamp = strtotime('+' . $vipCodeInfo->day . ' day'); + $expireTime = date("Y-m-d H:i:s", $expireTimestamp); + // 查询用户是否开通过vip,更新用户vip到期时间 + $vipLog = PurchaseVipModel::where(['user_id' => $userId])->find(); + if (!empty($vipLog)) { + if (empty($vipLog->expire)) { + return $this->toData('500', lang('vip_expiration_time_error')); + } + if ($vipLog->expire >= date("Y-m-d H:i:s")) { + $expireTimestamp = strtotime('+' . $vipCodeInfo->day . ' day', strtotime($vipLog->expire)); + $expireTime = date("Y-m-d H:i:s", $expireTimestamp); + } + $vipLog->expire = $expireTime; + $vipLog->save(); + } else { + PurchaseVipModel::create([ + 'user_id' => $userId, + 'expire' => $expireTime + ]); + } + // 修改vip兑换码使用状态 + $vipCodeInfo->status = 1; + $vipCodeInfo->uid = $userId; + $vipCodeInfo->used_time = date("Y-m-d H:i:s"); + $vipCodeInfo->save(); + return $this->toData('0', 'successful'); + } catch (\Exception $exception) { + return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); + } + } + + // 观看视频记录 + public function watchVideo($userId, $param) + { + try { + if (empty($param['video_id'])) { + return $this->toData('500', lang('missing param')); + } + $info = UserModel::where(['user_id' => $userId])->find(); + if (empty($info)) { + return $this->toData('500', lang('user_does_not_exist')); + } + $exists = WatchVideoLogModel::where(['user_id' => $userId, 'video_id' => $param['video_id']])->find(); + if (empty($exists)) { + WatchVideoLogModel::create([ + 'user_id' => $userId, + 'video_id' => $param['video_id'], + 'created_at' => date("Y-m-d H:i:s") + ]); + } + return $this->toData('0', 'successful'); + } catch (\Exception $exception) { + return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); + } + } + // 查询代理下的一个主播信息 public function getAnchorForAgent($userId) { @@ -433,9 +502,9 @@ class UserService extends BaseHomeService return $this->toData('500', lang('user_does_not_exist')); } // 查询代理下的一个主播信息 - $anchorData = AwsIvsModel::where(['agent_id'=>$info['agent_id']])->find(); + $anchorData = AwsIvsModel::where(['agent_id' => $info['agent_id']])->find(); if (empty($anchorData)) { - return $this->toData('500', lang('anchor_information_is_empty'), ['agent_id'=>$info['agent_id']]); + return $this->toData('500', lang('anchor_information_is_empty'), ['agent_id' => $info['agent_id']]); } return $this->toData('0', 'successful.', $anchorData->toArray()); } catch (\Exception $exception) { @@ -499,12 +568,12 @@ class UserService extends BaseHomeService validate(UserValidate::class)->scene('updateHeadImg')->check($param); $fileId = $param['file_id']; // 查询头像信息 - $avatarInfo = AwsS3Model::where(['id'=>$fileId])->find(); + $avatarInfo = AwsS3Model::where(['id' => $fileId])->find(); if (empty($avatarInfo)) { return $this->toData('500', lang('avatar_information_error')); } // 修改用户头像 - $user = UserModel::where(['user_id'=>$userId])->find(); + $user = UserModel::where(['user_id' => $userId])->find(); if (empty($user)) { return $this->toData('500', lang('user_does_not_exist')); } @@ -512,7 +581,7 @@ class UserService extends BaseHomeService $user->save(); // 查询用户的chat信息 - $userChatInfo = UserChatLinkModel::where(['user_id'=>$userId, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); + $userChatInfo = UserChatLinkModel::where(['user_id' => $userId, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); if (empty($userChatInfo)) { return $this->toData('500', lang('user_chat_data_error')); } @@ -554,7 +623,7 @@ class UserService extends BaseHomeService validate(UserValidate::class)->scene('updateInfo')->check($param); // 修改用户信息 - $user = UserModel::where(['user_id'=>$userId])->find(); + $user = UserModel::where(['user_id' => $userId])->find(); if (empty($user)) { return $this->toData('500', lang('user_does_not_exist')); } @@ -565,14 +634,14 @@ class UserService extends BaseHomeService $user->save(); // 获取用户chat信息 - $userChatInfo = UserChatLinkModel::where(['user_id'=>$userId,'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); + $userChatInfo = UserChatLinkModel::where(['user_id' => $userId, 'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find(); if (empty($userChatInfo)) { return $this->toData('500', lang('user_chat_data_error')); } // 获取用户头像 $avatarUrl = ""; if (!empty($user->head_img_id)) { - $avatarInfo = AwsS3Model::where(['id'=>$user->head_img_id])->find(); + $avatarInfo = AwsS3Model::where(['id' => $user->head_img_id])->find(); if (empty($avatarInfo)) { return $this->toData('500', lang('avatar_information_error')); } @@ -589,14 +658,12 @@ class UserService extends BaseHomeService $chatFriendsUrl = env('CHAT_SERVER.BASE_URL') . '/api/user'; $chatFriendsRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatFriendsUrl, $upChaData, 'PUT'); return $this->toData($chatFriendsRes['code'], $chatFriendsRes['msg'], [$chatFriendsRes['data']]); - } catch (ValidateException $validateException) { $message = $validateException->getError(); return $this->toData('500', $message); } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -758,12 +825,12 @@ class UserService extends BaseHomeService return $this->toData('500', lang('user_does_not_exist')); } -// // 校验验证码 -// $key = 'USER:sendEmailLoginNoTrade:'.$user['email']; -// $emailCache = Cache::store('redis')->get($key); -// if(empty($param['email_code']) || $emailCache != $param['email_code']){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // // 校验验证码 + // $key = 'USER:sendEmailLoginNoTrade:'.$user['email']; + // $emailCache = Cache::store('redis')->get($key); + // if(empty($param['email_code']) || $emailCache != $param['email_code']){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 如果已经存在交易密码 则不能设置 if (!empty($user['trade_password'])) { @@ -816,12 +883,12 @@ class UserService extends BaseHomeService return $this->toData('500', lang('payment_password_has_already_been_set')); } -// // 校验验证码 -// $mobile = $user['country_code'].$user['phone_number']; -// $key = 'USER:sendSmsLoginNoTrade:'.$mobile; -// if(Cache::store('redis')->get($key) != $param['sms_code']){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // // 校验验证码 + // $mobile = $user['country_code'].$user['phone_number']; + // $key = 'USER:sendSmsLoginNoTrade:'.$mobile; + // if(Cache::store('redis')->get($key) != $param['sms_code']){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 校验验证码 $payPassword = $param['pay_password']; @@ -840,7 +907,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -868,19 +934,19 @@ class UserService extends BaseHomeService } // 提取参数 -// $nation = $user['country_code']; -// $phone = $user['phone_number']; -// $smsCode = $param['sms_code']; + // $nation = $user['country_code']; + // $phone = $user['phone_number']; + // $smsCode = $param['sms_code']; $payPassword = $param['pay_password']; $payPasswordNew = $param['pay_password_new']; // 校验验证码 -// $mobile = $nation.$phone; -// $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; -// $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); -// if(empty($smsCode) || $smsCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $mobile = $nation.$phone; + // $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; + // $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); + // if(empty($smsCode) || $smsCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 校验旧密码 $checkPasswordBool = (new UnqId())->checkPassword($payPassword, $user['trade_password'], $user['salt']); @@ -894,7 +960,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -902,7 +967,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -931,17 +995,17 @@ class UserService extends BaseHomeService } // 提取参数 -// $email = $user['email']; -// $emailCode = $param['email_code']; + // $email = $user['email']; + // $emailCode = $param['email_code']; $payPassword = $param['pay_password']; $payPasswordNew = $param['pay_password_new']; // 校验验证码 -// $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; -// $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); -// if(empty($emailCode) || $emailCode != $cacheEmailCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; + // $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); + // if(empty($emailCode) || $emailCode != $cacheEmailCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 校验旧密码 $checkPasswordBool = (new UnqId())->checkPassword($payPassword, $user['trade_password'], $user['salt']); @@ -955,7 +1019,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -963,7 +1026,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -991,18 +1053,18 @@ class UserService extends BaseHomeService } // 提取参数 -// $nation = $user['country_code']; -// $phone = $user['phone_number']; -// $smsCode = $param['sms_code']; + // $nation = $user['country_code']; + // $phone = $user['phone_number']; + // $smsCode = $param['sms_code']; $payPasswordNew = $param['pay_password_new']; // 校验验证码 -// $mobile = $nation.$phone; -// $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; -// $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); -// if(empty($smsCode) || $smsCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $mobile = $nation.$phone; + // $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; + // $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); + // if(empty($smsCode) || $smsCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 设置密码 $newPassword = (new UnqId())->encryptPassword($payPasswordNew, $user['salt']); @@ -1010,7 +1072,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1018,7 +1079,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -1047,16 +1107,16 @@ class UserService extends BaseHomeService } // 提取参数 -// $email = $user['email']; -// $emailCode = $param['email_code']; + // $email = $user['email']; + // $emailCode = $param['email_code']; $payPasswordNew = $param['pay_password_new']; // 校验验证码 -// $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; -// $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); -// if(empty($emailCode) || $emailCode != $cacheEmailCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; + // $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); + // if(empty($emailCode) || $emailCode != $cacheEmailCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 设置密码 $newPassword = (new UnqId())->encryptPassword($payPasswordNew, $user['salt']); @@ -1064,7 +1124,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1091,19 +1150,19 @@ class UserService extends BaseHomeService } // 提取参数 -// $nation = $user['country_code']; -// $phone = $user['phone_number']; -// $smsCode = $param['sms_code']; + // $nation = $user['country_code']; + // $phone = $user['phone_number']; + // $smsCode = $param['sms_code']; $password = $param['password']; $passwordNew = $param['password_new']; // 校验验证码 -// $mobile = $nation.$phone; -// $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; -// $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); -// if(empty($smsCode) || $smsCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $mobile = $nation.$phone; + // $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; + // $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); + // if(empty($smsCode) || $smsCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 校验旧密码 $checkPasswordBool = (new UnqId())->checkPassword($password, $user['login_password'], $user['salt']); @@ -1117,7 +1176,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1125,7 +1183,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -1153,17 +1210,17 @@ class UserService extends BaseHomeService } // 提取参数 -// $email = $user['email']; -// $emailCode = $param['email_code']; + // $email = $user['email']; + // $emailCode = $param['email_code']; $password = $param['password']; $passwordNew = $param['password_new']; // 校验验证码 -// $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; -// $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); -// if(empty($emailCode) || $emailCode != $cacheEmailCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; + // $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); + // if(empty($emailCode) || $emailCode != $cacheEmailCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 校验旧密码 $checkPasswordBool = (new UnqId())->checkPassword($password, $user['login_password'], $user['salt']); @@ -1177,7 +1234,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1185,7 +1241,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -1212,18 +1267,18 @@ class UserService extends BaseHomeService } // 提取参数 -// $nation = $user['country_code']; -// $phone = $user['phone_number']; -// $smsCode = $param['sms_code']; + // $nation = $user['country_code']; + // $phone = $user['phone_number']; + // $smsCode = $param['sms_code']; $passwordNew = $param['password_new']; // 校验验证码 -// $mobile = $nation.$phone; -// $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; -// $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); -// if(empty($smsCode) || $smsCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $mobile = $nation.$phone; + // $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; + // $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); + // if(empty($smsCode) || $smsCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 设置密码 $newPassword = (new UnqId())->encryptPassword($passwordNew, $user['salt']); @@ -1231,7 +1286,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1239,7 +1293,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -1267,16 +1320,16 @@ class UserService extends BaseHomeService } // 提取参数 -// $email = $user['email']; -// $emailCode = $param['email_code']; + // $email = $user['email']; + // $emailCode = $param['email_code']; $passwordNew = $param['password_new']; // 校验验证码 -// $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; -// $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); -// if(empty($emailCode) || $emailCode != $cacheEmailCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $cacheEmailKey = 'USER:sendEmailLoginNoTrade:'.$email; + // $cacheEmailCode = Cache::store('redis')->get($cacheEmailKey); + // if(empty($emailCode) || $emailCode != $cacheEmailCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 设置密码 $newPassword = (new UnqId())->encryptPassword($passwordNew, $user['salt']); @@ -1284,7 +1337,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1306,13 +1358,13 @@ class UserService extends BaseHomeService validate(UserValidate::class)->scene('bindEmail')->check($param); // 判断验证码 -// $emailCode = $param['email_code']; + // $emailCode = $param['email_code']; $email = $param['email']; -// $cacheCodeKey = 'USER:sendEmailLoginNoTrade:'.$email; -// $cacheSmsCode = Cache::store('redis')->get($cacheCodeKey); -// if(empty($emailCode) || $emailCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $cacheCodeKey = 'USER:sendEmailLoginNoTrade:'.$email; + // $cacheSmsCode = Cache::store('redis')->get($cacheCodeKey); + // if(empty($emailCode) || $emailCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 获取用户信息 $user = UserModel::getFieldsByUserId('email,user_id', $userId); @@ -1336,7 +1388,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1365,13 +1416,13 @@ class UserService extends BaseHomeService validate(UserValidate::class)->scene('updateEmail')->check($param); // 判断验证码 -// $emailCode = $param['email_code']; + // $emailCode = $param['email_code']; $email = $param['email']; -// $cacheCodeKey = 'USER:sendEmailLoginNoTrade:'.$email; -// $cacheSmsCode = Cache::store('redis')->get($cacheCodeKey); -// if(empty($emailCode) || $emailCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $cacheCodeKey = 'USER:sendEmailLoginNoTrade:'.$email; + // $cacheSmsCode = Cache::store('redis')->get($cacheCodeKey); + // if(empty($emailCode) || $emailCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 获取用户信息 $user = UserModel::getFieldsByUserId('login_password,email,user_id,salt', $userId); @@ -1417,13 +1468,13 @@ class UserService extends BaseHomeService validate(UserValidate::class)->scene('bindPhone')->check($param); // 判断验证码 -// $smsCode = $param['sms_code']; -// $mobile = $param['nation'].$param['phone']; -// $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; -// $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); -// if(empty($smsCode) || $smsCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $smsCode = $param['sms_code']; + // $mobile = $param['nation'].$param['phone']; + // $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; + // $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); + // if(empty($smsCode) || $smsCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 获取用户信息 $user = UserModel::getFieldsByUserId('user_id,country_code,phone_number', $userId); @@ -1453,7 +1504,6 @@ class UserService extends BaseHomeService // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1482,13 +1532,13 @@ class UserService extends BaseHomeService validate(UserValidate::class)->scene('updatePhone')->check($param); // 判断验证码 -// $smsCode = $param['sms_code']; -// $mobile = $param['nation'].$param['phone']; -// $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; -// $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); -// if(empty($smsCode) || $smsCode != $cacheSmsCode){ -// return $this->toData('100400', 'The verification code is incorrect.', []); -// } + // $smsCode = $param['sms_code']; + // $mobile = $param['nation'].$param['phone']; + // $cacheSmsKey = 'USER:sendSmsLoginNoTrade:'.$mobile; + // $cacheSmsCode = Cache::store('redis')->get($cacheSmsKey); + // if(empty($smsCode) || $smsCode != $cacheSmsCode){ + // return $this->toData('100400', 'The verification code is incorrect.', []); + // } // 判断国家码是否存在 $codeExists = CountryModel::checkCodeExists($param['nation']); @@ -1537,23 +1587,22 @@ class UserService extends BaseHomeService // 参数校验 nation phone sms_code validate(UserValidate::class)->scene('apply_loan')->check($param); - $count=UserLoanModel::where('status',0)->where('user_id',$userId)->count(); - if($count>0){ + $count = UserLoanModel::where('status', 0)->where('user_id', $userId)->count(); + if ($count > 0) { return $this->toData('500', lang('there_is_an_application_record_please_wait_for_review')); } - $userloan=new UserLoanModel(); - $userloan->user_id=$userId; - $userloan->num= intval($param['num']); - $userloan->day= intval($param['day']); - $userloan->status= 0; - $userloan->is_delete= 0; - $userloan->create_time=date('Y-m-d H:i:s'); + $userloan = new UserLoanModel(); + $userloan->user_id = $userId; + $userloan->num = intval($param['num']); + $userloan->day = intval($param['day']); + $userloan->status = 0; + $userloan->is_delete = 0; + $userloan->create_time = date('Y-m-d H:i:s'); $userloan->save(); // 返回结果 return $this->toData('0', 'successful'); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1569,13 +1618,12 @@ class UserService extends BaseHomeService if (empty($userId) || $userId <= 0) { return $this->toData('500', lang('please_log_in_first')); } - $data['where']['user_id']=$userId; - $data['page']=isset($param['page']) ? intval($param['page']) : 1; - $data['size']=isset($param['size']) ? intval($param['size']) : 10; - $list=UserLoanModel::getUserLoanList($data); + $data['where']['user_id'] = $userId; + $data['page'] = isset($param['page']) ? intval($param['page']) : 1; + $data['size'] = isset($param['size']) ? intval($param['size']) : 10; + $list = UserLoanModel::getUserLoanList($data); // 返回结果 return $this->toData('0', 'successful', $list); - } catch (ValidateException $validateException) { // 参数校验失败 异常类 $message = $validateException->getError(); @@ -1600,7 +1648,6 @@ class UserService extends BaseHomeService } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } - } /** @@ -1674,13 +1721,12 @@ class UserService extends BaseHomeService } if (in_array($user['lever_status'], [UserModel::LEVER_STATUS_NO, UserModel::LEVER_STATUS_FAIL])) { - $level_status=env('USER_LEVEL.NO_APPLY')==1 ? UserModel::LEVER_STATUS_PASSED : UserModel::LEVER_STATUS_APPLY; + $level_status = env('USER_LEVEL.NO_APPLY') == 1 ? UserModel::LEVER_STATUS_PASSED : UserModel::LEVER_STATUS_APPLY; UserModel::update(['lever_status' => $level_status, 'update_time' => date('Y-m-d H:i:s')], ['user_id' => $userId]); return $this->toData('0', 'success'); } return $this->toData('0', 'Already submitted'); - } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } @@ -1697,35 +1743,35 @@ class UserService extends BaseHomeService if (empty($user)) { return $this->toData('500', lang('user_does_not_exist')); } - if(!empty($user['test_account'])){ + if (!empty($user['test_account'])) { return $this->toData('0', 'success', []); } //添加模拟账号 - $userNo=$this->getUniqUserNo(); - $email="test_".$userNo."@test.com"; + $userNo = $this->getUniqUserNo(); + $email = "test_" . $userNo . "@test.com"; $salt = env('ENCRYPT.SALT'); $password = (new UnqId())->encryptPassword('test12345', $salt); - $userInviteCode=$this->getUniqInviteCode(); + $userInviteCode = $this->getUniqInviteCode(); $parentUserId = $userId; $ip = (new BaseHomeService())->getClientRealIp(); $test_userId = UserModel::emailRegister($email, $userNo, $userInviteCode, $parentUserId, $password, $ip, $salt, 2, 0); - if($test_userId){ - $this->doRegInitUserInfo($test_userId,$parentUserId); + if ($test_userId) { + $this->doRegInitUserInfo($test_userId, $parentUserId); UserModel::where('user_id', $userId)->update([ 'test_account' => $test_userId ]); UserModel::where('user_id', $test_userId)->update([ 'is_real' => 0, - 'real_status'=>3 + 'real_status' => 3 ]); - if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + if (env('ACCOUT_TYPE.ALL_IN_ONE') == 1) { UserMoneyModel::where('user_id', $test_userId)->update([ 'user_id' => $test_userId, 'stock_id' => 'USD', 'usable_num' => 100000, 'frozen_num' => 0, ]); - }else{ + } else { UserDigitalModel::where('user_id', $test_userId)->update([ 'user_id' => $test_userId, 'digital_id' => 'USDT', @@ -1751,11 +1797,11 @@ class UserService extends BaseHomeService 'frozen_num' => 0, ]); } - } return $this->toData('0', 'success.', []); } - public function applyTestMoney($userId,$param){ + public function applyTestMoney($userId, $param) + { if (empty($userId) || $userId <= 0) { return $this->toData('500', lang('please_log_in_first')); } @@ -1765,15 +1811,15 @@ class UserService extends BaseHomeService if (empty($user)) { return $this->toData('500', lang('user_does_not_exist')); } - if($user['is_test_user']!=2){ + if ($user['is_test_user'] != 2) { return $this->toData('100402', 'error', []); } - $num=isset($param['num']) ? intval($param['num']) : 0; - if($num<=0 || $num>100000){ + $num = isset($param['num']) ? intval($param['num']) : 0; + if ($num <= 0 || $num > 100000) { return $this->toData('100401', 'error.', []); } - $user_money=UserMoneyModel::getUserUSDByUserId(['user_id'=>$userId]); - $update_num=$user_money['usable_num']+$num; + $user_money = UserMoneyModel::getUserUSDByUserId(['user_id' => $userId]); + $update_num = $user_money['usable_num'] + $num; UserMoneyModel::where('user_id', $userId)->update([ 'stock_id' => 'USD', 'usable_num' => $update_num, @@ -1789,11 +1835,11 @@ class UserService extends BaseHomeService if (empty($user)) { return $this->toData('500', lang('please_log_in_first')); } - if(empty($user['test_account'])){ + if (empty($user['test_account'])) { return $this->toData('500', lang('user_does_not_exist')); } //登录模拟账号 - $test_user=UserModel::getFieldsByUserId('test_account,user_id,user_no,nick_name,invite_code,is_real,is_test_user', $user['test_account']); + $test_user = UserModel::getFieldsByUserId('test_account,user_id,user_no,nick_name,invite_code,is_real,is_test_user', $user['test_account']); // 生成token $token = (new Jwt())->getToken($test_user['user_id'], env('ENCRYPT.SALT')); if (empty($token)) { @@ -1823,15 +1869,15 @@ class UserService extends BaseHomeService if (empty($user)) { return $this->toData('500', lang('user_does_not_exist')); } - if(empty($user['parent_id'])){ + if (empty($user['parent_id'])) { return $this->toData('500', lang('system_busy')); } - if(empty($user['is_test_user'])){ + if (empty($user['is_test_user'])) { return $this->toData('500', lang('system_busy')); } //登录模拟账号 - $test_user=UserModel::getFieldsByUserId('test_account,user_id,user_no,nick_name,invite_code,is_real,is_test_user', $user['parent_id']); - if($test_user['test_account']!=$userId){ + $test_user = UserModel::getFieldsByUserId('test_account,user_id,user_no,nick_name,invite_code,is_real,is_test_user', $user['parent_id']); + if ($test_user['test_account'] != $userId) { return $this->toData('500', lang('system_busy')); } // 生成token @@ -1869,6 +1915,7 @@ class UserService extends BaseHomeService 'page_url' => $param['page_url'], 'module' => $param['module'], 'remark' => $param['remark'], + 'ip' => $param['ip'] ?? '', ]); if (empty($userAccessLog)) { return $this->toData('500', lang('system_busy')); @@ -1880,20 +1927,21 @@ class UserService extends BaseHomeService } // 用户调用接口次数记录 - public function apiCalledRecord($userId, $param){ + public function apiCalledRecord($userId, $param) + { try { if (empty($param['api_name'])) { return $this->toData('400', lang('parameter_error')); } $apiName = trim($param['api_name']); - $apiCalledNum = ApiCalledNumModel::where(['user_id'=>$userId])->find(); + $apiCalledNum = ApiCalledNumModel::where(['user_id' => $userId])->find(); if (empty($apiCalledNum)) { ApiCalledNumModel::create([ 'user_id' => $userId, $apiName => 1 ]); } else { - ApiCalledNumModel::where(['user_id'=>$userId])->inc($apiName)->save(); + ApiCalledNumModel::where(['user_id' => $userId])->inc($apiName)->save(); } return $this->toData('0', 'success'); } catch (\Exception $exception) { @@ -1908,18 +1956,18 @@ class UserService extends BaseHomeService if (empty($param['api_name'])) { return $this->toData('400', lang('parameter_error')); } - $apiCalledNum = ApiCalledNumModel::where(['user_id'=>$userId])->find(); + $apiCalledNum = ApiCalledNumModel::where(['user_id' => $userId])->find(); $apiName = trim($param['api_name']); if (!empty($apiCalledNum) && $apiCalledNum->$apiName >= ApiCalledNumModel::API_CALLED_LIMIT) { - $vipInfo = PurchaseVipModel::where(['user_id'=>$userId])->find(); + $vipInfo = PurchaseVipModel::where(['user_id' => $userId])->find(); if (empty($vipInfo)) { - return $this->toData('0', 'success', ['is_called'=>false]); + return $this->toData('0', 'success', ['is_called' => false]); } if ($vipInfo->expire <= date("Y-m-d H:i:s")) { - return $this->toData('0', 'success', ['is_called'=>false]); + return $this->toData('0', 'success', ['is_called' => false]); } } - return $this->toData('0', 'success', ['is_called'=>true]); + return $this->toData('0', 'success', ['is_called' => true]); } catch (\Exception $exception) { return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); } diff --git a/app/model/ApiLogModel.php b/app/model/ApiLogModel.php new file mode 100644 index 00000000..1a9a336a --- /dev/null +++ b/app/model/ApiLogModel.php @@ -0,0 +1,9 @@ +count(); + $list = self::where($where)->field('trade_name as name,trade_name as code')->page($data['page'],$data['page_size'])->select(); + if(empty($list)){ + return []; + } + return [ + 'total'=>$count, + 'list'=>$list->toArray(), + ]; + } + public static function existMarket($trade_name):bool + { + $id=self::where('trade_name',$trade_name)->value('id'); + return $id >0; + } + public static function getMarketFaceList($type=0) + { + $list=self::where('status',1)->field('face_value,trade_name as name,trade_name as code,sort,max_pry,min_pry')->select(); + if(empty($list)){ + return []; + } + $list=$list->toArray(); + if($type==1){ + foreach ($list as $val){ + $face_list[$val['name']]=$val['face_value']; + } + }else{ + $face_list=$list; + } + + return $face_list; + } + + + +} \ No newline at end of file diff --git a/app/model/UserAccessLogModel.php b/app/model/UserAccessLogModel.php index 045923cc..3cec78af 100644 --- a/app/model/UserAccessLogModel.php +++ b/app/model/UserAccessLogModel.php @@ -1,7 +1,14 @@ belongsTo(UserModel::class, 'user_id', 'user_id'); + } +} diff --git a/app/model/VipCodeModel.php b/app/model/VipCodeModel.php new file mode 100644 index 00000000..fa12ffda --- /dev/null +++ b/app/model/VipCodeModel.php @@ -0,0 +1,7 @@ +request(); // $res = $result->toArray(); - // trace('短信发送结果:'.json_encode([$res]), 'error'); - // if(!isset($res['ResponseCode']) || $res['ResponseCode'] != 'OK'){ + // trace('短信发送结果:' . json_encode([$res]), 'error'); + // if (!isset($res['ResponseCode']) || $res['ResponseCode'] != 'OK') { // return false; // } return true; diff --git a/app/utility/UnqId.php b/app/utility/UnqId.php index 6f9e1b25..b0e62b66 100644 --- a/app/utility/UnqId.php +++ b/app/utility/UnqId.php @@ -35,4 +35,22 @@ class UnqId $encryptPassword = $this->encryptPassword($string, $salt); return $encryptPassword == $password; } + + // 生成随机字符 + public function generateRandomCode($length = 15): string + { + $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + $charLength = strlen($chars); + $code = ''; + + // 生成足够长度的安全随机数 + $randomBytes = random_bytes($length); + + for ($i = 0; $i < $length; $i++) { + $code .= $chars[random_int(0, $charLength - 1)]; + } + + return $code; + } + } \ No newline at end of file diff --git a/config/console.php b/config/console.php index a818a980..119f6ac7 100644 --- a/config/console.php +++ b/config/console.php @@ -5,5 +5,6 @@ return [ // 指令定义 'commands' => [ + \app\command\ApiLogCommand::class, ], ];