From aa9425d6f58a56c7d5757c8a10163cdfb9339c4e Mon Sep 17 00:00:00 2001 From: chuan <2154243450@qq.com> Date: Fri, 3 Jan 2025 17:14:27 +0800 Subject: [PATCH] copy by test --- app/admin/controller/Flow.php | 6 + app/admin/controller/Index.php | 30 + app/admin/controller/User.php | 24 + app/admin/controller/setting/Forex.php | 24 +- app/admin/job/SendGo.php | 72 ++ app/admin/route/app.php | 19 +- app/admin/service/AdminBaseService.php | 173 +++- app/admin/service/FlowService.php | 432 +------- app/admin/service/RechargeService.php | 10 +- app/admin/service/UserService.php | 732 ++++++++----- app/admin/service/WithdrawService.php | 27 +- .../service/setting/BlockStockService.php | 54 +- app/admin/service/setting/ForexService.php | 183 +++- app/admin/service/setting/HqService.php | 1 + app/admin/service/setting/IPOService.php | 4 +- .../service/setting/StockMarketService.php | 16 + app/admin/validate/setting/HqValidate.php | 4 +- app/home/controller/Country.php | 2 +- app/home/controller/Login.php | 2 +- app/home/controller/News.php | 91 ++ app/home/controller/User.php | 44 + app/home/controller/Wallet.php | 2 + app/home/route/app.php | 14 + app/home/service/BaseHomeService.php | 155 +-- app/home/service/BlockStockService.php | 7 +- app/home/service/IPOService.php | 44 +- app/home/service/LoginService.php | 52 +- app/home/service/MarketService.php | 4 +- app/home/service/PreHkdStockService.php | 665 ------------ app/home/service/PreIdnStockService.php | 675 ------------ app/home/service/PreInStockService.php | 670 ------------ app/home/service/PreMysStockService.php | 672 ------------ app/home/service/PreSgdStockService.php | 670 ------------ app/home/service/PreThaStockService.php | 672 ------------ app/home/service/PreUsStockService.php | 681 ------------- app/home/service/UserService.php | 286 +++++- app/home/service/UserVerifyService.php | 6 +- app/home/service/WalletService.php | 961 ++++++++++-------- app/home/validate/UserValidate.php | 9 +- app/model/ForexListMode.php | 79 -- app/model/ForexMarketModel.php | 11 + app/model/StockBlockListModel.php | 4 + app/model/StockJpListModel.php | 7 + app/model/UserBankModel.php | 2 + app/model/UserLoanModel.php | 22 + app/model/UserMoneyLogModel.php | 59 ++ app/model/UserMoneyModel.php | 81 ++ composer.json | 64 ++ config/app.php | 2 +- 49 files changed, 2555 insertions(+), 5971 deletions(-) create mode 100644 app/admin/job/SendGo.php create mode 100644 app/home/controller/News.php delete mode 100644 app/home/service/PreHkdStockService.php delete mode 100644 app/home/service/PreIdnStockService.php delete mode 100644 app/home/service/PreInStockService.php delete mode 100644 app/home/service/PreMysStockService.php delete mode 100644 app/home/service/PreSgdStockService.php delete mode 100644 app/home/service/PreThaStockService.php delete mode 100644 app/home/service/PreUsStockService.php delete mode 100644 app/model/ForexListMode.php create mode 100644 app/model/ForexMarketModel.php create mode 100644 app/model/UserLoanModel.php create mode 100644 app/model/UserMoneyLogModel.php create mode 100644 app/model/UserMoneyModel.php create mode 100644 composer.json diff --git a/app/admin/controller/Flow.php b/app/admin/controller/Flow.php index accbacf..fc664f3 100644 --- a/app/admin/controller/Flow.php +++ b/app/admin/controller/Flow.php @@ -90,4 +90,10 @@ class Flow extends AdminBaseController $result = $service->blockStock($this->request->param(),$this->getAdminId()); return json($result); } + public function allList() + { + $service = new FlowService(); + $result = $service->allList($this->request->param(),$this->getAdminId()); + return json($result); + } } \ No newline at end of file diff --git a/app/admin/controller/Index.php b/app/admin/controller/Index.php index 86765b9..9b087ab 100644 --- a/app/admin/controller/Index.php +++ b/app/admin/controller/Index.php @@ -57,8 +57,10 @@ use app\model\UserStockThaLogModel; use app\model\UserStockThaModel; use app\model\UserThaPreStockOrderModel; use app\model\UserUsPreStockOrderModel; +use app\model\UserVerifyLogModel; use app\model\UserWithdrawalModel; use app\utility\ClientGo; +use think\facade\Cache; use think\facade\Db; use think\facade\Queue; use PhpOffice\PhpSpreadsheet\IOFactory; @@ -166,6 +168,12 @@ class Index extends AdminBaseController ->whereTime('create_time', 'between', [$today, $tomorrow]) ->where('status', 2)->sum('apply_num'); + //等待处理订单 + $no_deal_recharge=Db::table($rechargeApplyTableName)->where('status', 0)->count(); + $no_deal_withdraw=Db::table($userWithdrawTableName)->where('status', 0)->count(); + $no_deal_real=Db::table($userTableName)->where('real_status', 2)->count(); + $no_deal_level=Db::table($userTableName)->where('lever_status', 2)->count(); + $data = [ 'totalRegisterNum' => $totalRegisterNum, // 总注册人数 @@ -181,6 +189,11 @@ class Index extends AdminBaseController 'todayWithdrawNum' => $todayWithdrawNum, // 今日提款用户 'todayRechargeAmount' => $todayRechargeAmount, // 今日充值金额 'todayWithdrawAmount' => $todayWithdrawAmount, // 今日提款金额 + + 'no_deal_recharge' => $no_deal_recharge, // 等待处理充值订单数量 + 'no_deal_withdraw' => $no_deal_withdraw, // 等待处理提现订单数量 + 'no_deal_real' => $no_deal_real, // 等待审核实名数量 + 'no_deal_level' => $no_deal_level, // 等待审核开通杠杆数量 ]; return json(['code' => '0', 'message' => 'SUCCESS', 'data' => $data]); @@ -188,6 +201,22 @@ class Index extends AdminBaseController return json(['code' => '1', 'message' => '系统繁忙']); } } + public function getReamNum() + { + $adminId= $this->getAdminId(); + $Withdraw_Read_Time= Cache::store('redis')->get('Withdraw_Read_Time'.$adminId); + $Recharge_Read_Time= Cache::store('redis')->get('Recharge_Read_Time'.$adminId); + $User_Read_Time= Cache::store('redis')->get('User_Read_Time'.$adminId); + + $withdraw_count=UserWithdrawalModel::where('create_time','>=',date('Y-m-d H:i:s',$Withdraw_Read_Time))->count(); + $recharge_count=RechargeApplyModel::where('create_time','>=',date('Y-m-d H:i:s',$Recharge_Read_Time))->count(); + $real_count=UserVerifyLogModel::where('create_time','>=',date('Y-m-d H:i:s',$User_Read_Time))->count(); + return json(['code' => '0', 'message' => 'SUCCESS', 'data' => [ + 'withdraw_count'=>$withdraw_count, + 'recharge_count'=>$recharge_count, + 'real_count'=>$real_count, + ]]); + } // 缓存美股数据 public function cacheUsStock() @@ -826,6 +855,7 @@ class Index extends AdminBaseController var_dump("交易手续费完成"); // 合约插针缓存 (new AdminBaseService())->initContractHqData(); + (new AdminBaseService())->initForexHqData(); (new AdminBaseService())->initContractSetting(); var_dump("合约插针完成"); diff --git a/app/admin/controller/User.php b/app/admin/controller/User.php index 024764f..b1b4080 100644 --- a/app/admin/controller/User.php +++ b/app/admin/controller/User.php @@ -14,6 +14,18 @@ class User extends AdminBaseController $result = $service->index($this->request->param(),$this->getAdminId()); return json($result); } + public function RealList() + { + $service = new UserService(); + $result = $service->RealList($this->request->param(),$this->getAdminId()); + return json($result); + } + public function LevelList() + { + $service = new UserService(); + $result = $service->LevelList($this->request->param(),$this->getAdminId()); + return json($result); + } // 用户状态操作 public function status() @@ -79,6 +91,18 @@ class User extends AdminBaseController $result = $service->getUserCode($this->request->param()); return json($result); } + public function get_loan() + { + $service = new UserService(); + $result = $service->getUserLoan($this->request->param(),$this->getAdminId()); + return json($result); + } + public function deal_loan() + { + $service = new UserService(); + $result = $service->dealUserLoan($this->request->param(),$this->getAdminId()); + return json($result); + } public function getRegCode() { diff --git a/app/admin/controller/setting/Forex.php b/app/admin/controller/setting/Forex.php index eda8c68..bf2a7eb 100644 --- a/app/admin/controller/setting/Forex.php +++ b/app/admin/controller/setting/Forex.php @@ -4,6 +4,8 @@ namespace app\admin\controller\setting; use app\admin\controller\AdminBaseController; use app\admin\service\setting\ForexService; +use app\admin\service\setting\HqService; +use app\model\ForexMarketModel; // 合约交易对 class Forex extends AdminBaseController @@ -44,23 +46,33 @@ class Forex extends AdminBaseController return json($result); } - public function set_add() + public function hq_index() { $service = new ForexService(); - $result = $service->set_add($this->request->param()); + $result = $service->hq_index(); return json($result); } - public function set_edit() + + public function hq_add() + { + $service = new ForexService(); + $result = $service->hq_add($this->request->param()); + return json($result); + } + + public function hq_edit() { $service = new ForexService(); - $result = $service->set_edit($this->request->param()); + $result = $service->hq_edit($this->request->param()); return json($result); } - public function set_del() + + public function hq_del() { $service = new ForexService(); - $result = $service->set_del($this->request->param()); + $result = $service->hq_del($this->request->param()); return json($result); } + } \ No newline at end of file diff --git a/app/admin/job/SendGo.php b/app/admin/job/SendGo.php new file mode 100644 index 0000000..0169051 --- /dev/null +++ b/app/admin/job/SendGo.php @@ -0,0 +1,72 @@ +sendStockToGo($data['id'], $data['stock_code'], $data['market_type']); + if (!$bool) { + trace('---通知交易异常---', 'error'); + $status = 2; + } else { + $status = 1; + } + (new IPOService())->updateIPOStatus($data['market_type'], $data['id'], $data['type'], $status); + break; + //后支付通知交易 + case 'last_trade': + $bool = (new IPOService())->sendStockToTrade($data['order_no'], $data['stock_code'], $data['market_type']); + if (!$bool) { + trace('---通知交易异常---', 'error'); + $status = 2; + } else { + $status = 1; + } + (new IPOService())->updateIPOStatus($data['market_type'], $data['id'], $data['type'], $status, $data['order_no']); + break; + // 通知行情 + case 'hq': + $bool = (new IPOService())->sendNewStockToGo($data['country'], $data['stock_code'], $data['stock_code'], $data['stock_name'], $data['tape'], $data['price'], $data['isReal'], $data['company_info'], $data['source'], $data['numeric_code'] ?? 0); + if (!$bool) { + trace('---通知行情异常---', 'error'); + $status = 2; + } else { + $status = 1; + } + (new IPOService())->updateIPOStatus($data['market_type'], $data['id'], $data['type'], $status); + break; + case 'fee': + $bool = (new IPOService())->stockIPOFee($data['market_type'], $data['id'], $data['stock_code']); + if (!$bool) { + trace('---通知扣除异常---', 'error'); + } + break; + } + + } catch (\Exception $exception) { + trace('---通知GO异常---' . $exception->getMessage(), 'error'); + } + + $job->delete(); + } + +} \ No newline at end of file diff --git a/app/admin/route/app.php b/app/admin/route/app.php index 5448570..d4a81ce 100644 --- a/app/admin/route/app.php +++ b/app/admin/route/app.php @@ -23,6 +23,7 @@ Route::group('/', function () { // 首页数据 Route::post('/index', 'Index/index'); + Route::post('/read_num', 'Index/getReamNum'); // 现货订单 Route::post('/order/digital_place', 'Order/digitalPlace'); @@ -149,6 +150,7 @@ Route::group('/', function () { // 用户管理 Route::post('/user/index', 'User/index'); + Route::post('/user/real_list', 'User/RealList'); Route::post('/user/status', 'User/status'); Route::post('/user/change', 'User/change')->middleware('admin_log'); Route::post('/user/relation', 'User/relation'); @@ -162,6 +164,12 @@ Route::group('/', function () { Route::post('/user/give_stock_list', 'setting.GiveStock/index'); // 配置管理 + // 合约插针行情 + Route::post('/setting/forex_hq_index', 'setting.Forex/hq_index'); + Route::post('/setting/forex_hq_add', 'setting.Forex/hq_add'); + Route::post('/setting/forex_hq_edit', 'setting.Forex/hq_edit'); + Route::post('/setting/forex_hq_del', 'setting.Forex/hq_del'); + // 合约插针行情 Route::post('/setting/hq_index', 'setting.Hq/index'); Route::post('/setting/hq_add', 'setting.Hq/add'); @@ -280,7 +288,7 @@ Route::group('/', function () { Route::post('/setting/forex_index', 'setting.Forex/index'); Route::post('/setting/forex_add', 'setting.Forex/add'); Route::post('/setting/forex_edit', 'setting.Forex/edit'); - Route::post('/setting/forex_select', 'setting.Contract/getTradeNameList'); + Route::post('/setting/forex_select', 'setting.Forex/getTradeNameList'); // 印度期权交易对 @@ -477,13 +485,16 @@ Route::group('/', function () { 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/forex_list', 'Flow/forexList'); //外汇流水 + Route::post('/flow/block_stock', 'Flow/blockStock'); //股票大宗流水 + Route::post('/flow/lists', 'Flow/allList'); //所有账号流水 Route::post('/flow/fund_stock', 'Flow/fundStock'); Route::post('/flow/in_option_stock', 'Flow/inOptionStock'); - Route::post('/flow/block_stock', 'Flow/blockStock'); + // 充值订单 @@ -567,6 +578,10 @@ Route::group('/', function () { Route::post('/vote/add', 'Vote/add'); Route::post('/vote/edit', 'Vote/edit'); Route::post('/vote/del', 'Vote/del'); + // 贷款 + Route::post('/user/loan', 'User/get_loan'); + Route::post('/user/deal_loan', 'User/deal_loan'); + // 用户验证码 Route::post('/user/get_user_code', 'User/getUserCode'); diff --git a/app/admin/service/AdminBaseService.php b/app/admin/service/AdminBaseService.php index 996d94f..2245a36 100644 --- a/app/admin/service/AdminBaseService.php +++ b/app/admin/service/AdminBaseService.php @@ -5,6 +5,9 @@ namespace app\admin\service; use app\model\AdminModel; use app\model\ContractMarketModel; use app\model\ContractSettingModel; +use app\model\ForexMarketModel; +use app\model\UserMoneyLogModel; +use app\model\UserMoneyModel; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use think\db\exception\PDOException; @@ -239,7 +242,7 @@ class AdminBaseService 'create_time' => date('Y-m-d H:i:s'), 'update_time' => date('Y-m-d H:i:s') ]; - if (in_array($account_type, [1, 2, 8])) { + if (in_array($account_type, [1, 2, 8,19])) { $insert_data['contract_id'] = $where['contract_id']; } else { $insert_data['stock_id'] = $where['stock_id']; @@ -289,7 +292,39 @@ class AdminBaseService } } + $change_data['usable_num'] = $last_usable_num; + $change_data['frozen_num'] = $last_frozen_num; + $change_data['update_time'] = date('Y-m-d H:i:s'); + $change_bool = Db::table($table)->where($where)->update($change_data); + if ($change_bool == 0) { + Db::rollback(); + return [ + 'status' => 100, + 'msg' => '账户修改失败' + ]; + } + + //echo Db::table($table)->where($where)->getLastSql(); + $log_data['user_id'] = $user_id; + $log_data['change_type'] = $change_type; + $log_data['before_num'] = $account_info['usable_num']; + $log_data['change_num'] = $change_usable_num; + $log_data['create_time'] = date('Y-m-d H:i:s'); + $log_data['update_time'] = date('Y-m-d H:i:s'); + if (!empty($order_no)) { + $log_data['order_id'] = $order_no; + } + $log_bool = Db::table($log_table)->insert($log_data); + if (!$log_bool) { + Db::rollback(); + return [ + 'status' => 100, + 'msg' => '账户流水插入失败' + ]; + } + //后台系统 变更用户余额 + //需要录入变更日志 bot_user_balance_change_log if (in_array($change_type, [12, 13]) && $change_log_admin_id > 0 && $rate != 0) { $balance_change_log["user_id"] = $user_id; $balance_change_log["type"] = $account_type; @@ -317,7 +352,103 @@ class AdminBaseService Db::rollback(); return [ 'status' => 100, - 'msg' => $e->getMessage() + 'msg' => $e->getMessage(), + 'data'=>[$e->getTrace()] + ]; + } + } + public function updateUserAssetNew($user_id,$change_type,$change_usable_num,$change_frozen_num = 0, $order_no = ""){ + Db::startTrans(); + try{ + $account_info = UserMoneyModel::where('user_id',$user_id)->where('stock_id','USD')->lock(true)->find(); + if (empty($account_info)) { + UserMoneyModel::InsertUserMoneyk([ + 'user_id' => $user_id, + 'stock_id' => 'USD', + 'usable_num' => 0, + 'frozen_num' => 0, + ]); + $account_info = UserMoneyModel::where('user_id', $user_id)->where('stock_id', 'USD')->lock(true)->find(); + if (empty($account_info)) { + Db::rollback(); + return [ + 'status' => 300, + 'msg' => '用户资金账号不存在' + ]; + } + } + + $last_usable_num = bcadd($account_info['usable_num'], $change_usable_num, 18); + $last_frozen_num = bcadd($account_info['frozen_num'], $change_frozen_num, 18); + + if ($last_usable_num < 0) { + Db::rollback(); + return [ + 'status' => 400, + 'msg' => '可用资金不能为负' + ]; + } + if ($change_type == 6) { + if ($last_frozen_num < 0 && abs($last_frozen_num) > 0.01) { + Db::rollback(); + return [ + 'status' => 400, + 'msg' => '冻结资金不能为负' + ]; + } elseif (abs($last_frozen_num) < 0.01) { + $last_frozen_num = 0; + } + } else { + if ($last_frozen_num < 0) { + Db::rollback(); + return [ + 'status' => 400, + 'msg' => '冻结资金不能为负' + ]; + } + } + + $res=UserMoneyModel::where('user_id',$user_id)->where('stock_id','USD')->update([ + 'usable_num'=>$last_usable_num, + 'frozen_num'=>$last_frozen_num, + 'update_time'=>date('Y-m-d H:i:s'), + ]); + if(!$res){ + Db::rollback(); + return [ + 'status' => 400, + 'msg' => '资金操作异常' + ]; + } + $log_bool=UserMoneyLogModel::InsertUserBalanceLog([ + 'user_id'=>$user_id, + 'change_type'=>$change_type, + 'stock_id'=>'USD', + 'martket_type'=>0, + 'before_num'=>$account_info['usable_num'], + 'change_num'=>$change_usable_num, + 'create_time'=>date('Y-m-d H:i:s'), + 'update_time'=>date('Y-m-d H:i:s'), + ]); + if (!$log_bool) { + Db::rollback(); + return [ + 'status' => 100, + 'msg' => '账户流水插入失败' + ]; + } + Db::commit(); + return [ + 'status' => 200, + 'msg' => 'ok' + ]; + + } catch (ValidateException|PDOException|\Exception $e) { + Db::rollback(); + return [ + 'status' => 100, + 'msg' => $e->getMessage(), + 'data' => [$e->getTrace()] ]; } } @@ -346,6 +477,30 @@ class AdminBaseService $redis->set($reds_key, json_encode($rows)); } + // 外汇插针缓存 + public function initForexHqData() + { + $now = date('Y-m-d H:i:s'); + $list = ForexMarketModel::where('type', 0) + ->whereTime('begin_time', '>', $now) + ->field('trade_name as selfContractCode,begin_time as BeginTime,step as Step ,end_time as EndTime,max_price as Price') + ->order('id', 'desc') + ->select(); + $rows = []; + $redis = $this->getRedis(); + if (!$list->isEmpty()) { + $rows = $list->toArray(); + foreach ($rows as $key => $val) { + $keep_decimal = $redis->hget('FOREX:LIST:' . $val['selfContractCode'], 'keep_decimal'); + $list[$key]['Digits'] = $keep_decimal; + } + } + + $reds_key = "forex_hq_setting"; + $redis->del($reds_key); + $redis->set($reds_key, json_encode($rows)); + } + public function initContractSetting() { $list = ContractSettingModel::getSettingList(); @@ -358,7 +513,7 @@ class AdminBaseService // 合约自发行情缓存 public function initContractMarketData() { - + $redis = $this->getRedis(); $now = date('Y-m-d H:i:s'); $list = ContractMarketModel::where('type', 1) ->whereTime('begin_time', '>', $now) @@ -371,7 +526,7 @@ class AdminBaseService } $key = "contract_market_setting"; - $this->redis->set($key, json_encode($rows)); + $redis->set($key, json_encode($rows)); } public function getBrokerageKey($type) @@ -535,7 +690,9 @@ class AdminBaseService } $responseArr = [ + 'old_ticker' => $oldStockCode, //新的股票代码 'new_ticker' => $newStockCode, //旧的股票代码 (新增的话 ,两个字段都是一样的值) + 'token' => 'asdfsnl123jlknl3nksdf32345ln98sdfsfs8891232nsdfsdfsdfsdxcfvbhnfgh', 'locale' => $country, //国家 'yesterday_close' => $price, //价格 'name' => $stockName, //股票name @@ -699,6 +856,13 @@ class AdminBaseService $body = $response->getBody()->getContents(); $res = json_decode($body, true); + Log::info('给交易推送数据 ' . json_encode([$res, [ + 'url' => $url, + 'code' => $newCode, + 'codeOld' => $oldCode, + 'stock' => $marketType,]])); + + if (isset($res['code']) && $res['code'] == 200) { return true; } @@ -728,6 +892,7 @@ class AdminBaseService $response = $client->request("POST", $url, [ 'json' => [ 'ticker' => $code, + 'locale' => $country, 'state' => $status, 'sort' => $sort, ], diff --git a/app/admin/service/FlowService.php b/app/admin/service/FlowService.php index 57d2ce4..5cb4d90 100644 --- a/app/admin/service/FlowService.php +++ b/app/admin/service/FlowService.php @@ -11,6 +11,7 @@ use app\model\UserContractLogModel; use app\model\UserDigitalLogModel; use app\model\UserForexLogModel; use app\model\UserModel; +use app\model\UserMoneyLogModel; use app\model\UserStockBlockLogModel; use app\model\UserStockFundLogModel; use app\model\UserStockHkdLogModel; @@ -523,154 +524,14 @@ class FlowService extends AdminBaseService ######################################## 美股资产流水 ################################ - // 美股 - public function usStock($param, $adminId) - { - try { - // 参数校验 - validate(FlowValidate::class)->scene('us_stock')->check($param); - - $where = []; - $userId = 0; - // 用户号精确搜索 - 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' => [], ]); - } - $userId = $user['user_id']; - } - - // 判断是否是代理 如果是代理 只能看他自己管理的用户 - $whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); - if (!is_array($whereU)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); - } - - $changeTypeArr = UserStockLogModel::group('change_type')->column('change_type'); - - if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; - - // 交易对 - if (!empty($param['stock_id'])) { - $where['stock_id'] = $param['stock_id']; - } - - if (!empty($param['start_time']) && !empty($param['end_time'])) { - $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; - } - - // 列表 - $list = UserStockLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); - // 总数 - $total = UserStockLogModel::where($where)->where($whereU) - ->count(); - - $rows = []; - if (!$list->isEmpty()) { - $rows = $list->toArray(); - // 获取用户号 - $userIdArr = []; - foreach ($list as $idItem) { - $userIdArr[] = $idItem['user_id']; - } - - $userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); - foreach ($rows as $key => $item) { - $rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 - } - } - - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => [ - 'change_type_list' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr) - ]]); - } catch (ValidateException $validateException) { - // 参数校验失败 - $message = $validateException->getError(); - return $this->toData('1', $message); - } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); - } - } - - - // 印尼股票 - public function idnStock($param, $adminId) - { - try { - // 参数校验 - validate(FlowValidate::class)->scene('idn_stock')->check($param); - - $where = []; - $userId = 0; - // 用户号精确搜索 - 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' => [], ]); - } - $userId = $user['user_id']; - } - - // 判断是否是代理 如果是代理 只能看他自己管理的用户 - $whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); - if (!is_array($whereU)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); - } - - $changeTypeArr = UserStockIdnLogModel::group('change_type')->column('change_type'); - - if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; - - // 交易对 - if (!empty($param['stock_id'])) { - $where['stock_id'] = $param['stock_id']; - } - - if (!empty($param['start_time']) && !empty($param['end_time'])) { - $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; - } - // 列表 - $list = UserStockIdnLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); - // 总数 - $total = UserStockIdnLogModel::where($where)->where($whereU) - ->count(); - $rows = []; - if (!$list->isEmpty()) { - $rows = $list->toArray(); - // 获取用户号 - $userIdArr = []; - foreach ($list as $idItem) { - $userIdArr[] = $idItem['user_id']; - } - - $userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); - foreach ($rows as $key => $item) { - $rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 - } - } - - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => [ - 'change_type_list' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr) - ]]); - } catch (ValidateException $validateException) { - // 参数校验失败 - $message = $validateException->getError(); - return $this->toData('1', $message); - } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); - } - } - - - // 马来西亚 - public function mysStock($param, $adminId) + // 基金流水 + public function fundStock($param, $adminId) { try { // 参数校验 - validate(FlowValidate::class)->scene('mys_stock')->check($param); + validate(FlowValidate::class)->scene('fund_stock')->check($param); $where = []; $userId = 0; @@ -689,7 +550,7 @@ class FlowService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); } - $changeTypeArr = UserStockMysLogModel::group('change_type')->column('change_type'); + $changeTypeArr = UserStockFundLogModel::group('change_type')->column('change_type'); if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; @@ -703,10 +564,9 @@ class FlowService extends AdminBaseService } // 列表 - $list = UserStockMysLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); + $list = UserStockFundLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 - $total = UserStockMysLogModel::where($where)->where($whereU) - ->count(); + $total = UserStockFundLogModel::where($where)->where($whereU)->count(); $rows = []; if (!$list->isEmpty()) { @@ -736,12 +596,12 @@ class FlowService extends AdminBaseService } - // 泰国股票 - public function thaStock($param, $adminId) + // 香港股票 + public function StockLogs($param, $adminId) { try { // 参数校验 - validate(FlowValidate::class)->scene('tha_stock')->check($param); + validate(FlowValidate::class)->scene('us_stock')->check($param); $where = []; $userId = 0; @@ -760,81 +620,16 @@ class FlowService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); } - $changeTypeArr = UserStockThaLogModel::group('change_type')->column('change_type'); + $changeTypeArr = UserStockHkdLogModel::group('change_type')->column('change_type'); if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; - // 交易对 - if (!empty($param['stock_id'])) { - $where['stock_id'] = $param['stock_id']; - } - - if (!empty($param['start_time']) && !empty($param['end_time'])) { - $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; - } - - // 列表 - $list = UserStockThaLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); - // 总数 - $total = UserStockThaLogModel::where($where)->where($whereU) - ->count(); - - $rows = []; - if (!$list->isEmpty()) { - $rows = $list->toArray(); - // 获取用户号 - $userIdArr = []; - foreach ($list as $idItem) { - $userIdArr[] = $idItem['user_id']; - } - - $userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); - foreach ($rows as $key => $item) { - $rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 - } - } - - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => [ - 'change_type_list' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr) - ]]); - } catch (ValidateException $validateException) { - // 参数校验失败 - $message = $validateException->getError(); - return $this->toData('1', $message); - } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); - } - } - - - // 泰国股票 - public function inStock($param, $adminId) - { - try { - // 参数校验 - validate(FlowValidate::class)->scene('in_stock')->check($param); - - $where = []; - $userId = 0; - // 用户号精确搜索 - 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' => [], ]); - } - $userId = $user['user_id']; - } - - // 判断是否是代理 如果是代理 只能看他自己管理的用户 - $whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); - if (!is_array($whereU)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); + $market_type=intval($param['market_type']); + $table_obj=(new IPOService())->getStockModel($market_type); + if (empty($table_obj)) { + return $this->toData('1', '数据异常'); } - $changeTypeArr = UserStockInLogModel::group('change_type')->column('change_type'); - - if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; - // 交易对 if (!empty($param['stock_id'])) { $where['stock_id'] = $param['stock_id']; @@ -845,9 +640,9 @@ class FlowService extends AdminBaseService } // 列表 - $list = UserStockInLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); + $list = Db::table($table_obj['log_table'])->where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 - $total = UserStockInLogModel::where($where)->where($whereU) + $total = Db::table($table_obj['log_table'])->where($where)->where($whereU) ->count(); $rows = []; @@ -873,16 +668,16 @@ class FlowService extends AdminBaseService $message = $validateException->getError(); return $this->toData('1', $message); } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); + return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(),$exception->getTrace()]); } } - // 新加坡股票流水 - public function sgdStock($param, $adminId) + // 印度期权 + public function inOptionStock($param, $adminId) { try { // 参数校验 - validate(FlowValidate::class)->scene('sgd_stock')->check($param); + validate(FlowValidate::class)->scene('hk_stock')->check($param); $where = []; $userId = 0; @@ -901,7 +696,7 @@ class FlowService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); } - $changeTypeArr = UserStockSgdLogModel::group('change_type')->column('change_type'); + $changeTypeArr = UserStockOptionInrLogModel::group('change_type')->column('change_type'); if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; @@ -910,83 +705,16 @@ class FlowService extends AdminBaseService $where['stock_id'] = $param['stock_id']; } - if (!empty($param['start_time']) && !empty($param['end_time'])) { - $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; - } - - // 列表 - $list = UserStockSgdLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); - // 总数 - $total = UserStockSgdLogModel::where($where)->where($whereU)->count(); - - $rows = []; - if (!$list->isEmpty()) { - $rows = $list->toArray(); - // 获取用户号 - $userIdArr = []; - foreach ($list as $idItem) { - $userIdArr[] = $idItem['user_id']; - } - - $userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); - foreach ($rows as $key => $item) { - $rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 - } - } - - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => [ - 'change_type_list' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr) - ]]); - } catch (ValidateException $validateException) { - // 参数校验失败 - $message = $validateException->getError(); - return $this->toData('1', $message); - } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); - } - } - - // 基金流水 - public function fundStock($param, $adminId) - { - try { - // 参数校验 - validate(FlowValidate::class)->scene('fund_stock')->check($param); - - $where = []; - $userId = 0; - // 用户号精确搜索 - 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' => [], ]); - } - $userId = $user['user_id']; - } - - // 判断是否是代理 如果是代理 只能看他自己管理的用户 - $whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); - if (!is_array($whereU)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); - } - - $changeTypeArr = UserStockFundLogModel::group('change_type')->column('change_type'); - - if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; - - // 交易对 - if (!empty($param['stock_id'])) { - $where['stock_id'] = $param['stock_id']; - } if (!empty($param['start_time']) && !empty($param['end_time'])) { $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; } // 列表 - $list = UserStockFundLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); + $list = UserStockOptionInrLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 - $total = UserStockFundLogModel::where($where)->where($whereU)->count(); + $total = UserStockOptionInrLogModel::where($where)->where($whereU) + ->count(); $rows = []; if (!$list->isEmpty()) { @@ -1015,12 +743,12 @@ class FlowService extends AdminBaseService } } - // 香港股票 - public function hkStock($param, $adminId) + // 香股 + public function blockStock($param, $adminId) { try { // 参数校验 - validate(FlowValidate::class)->scene('hk_stock')->check($param); + validate(FlowValidate::class)->scene('block_stock')->check($param); $where = []; $userId = 0; @@ -1039,7 +767,7 @@ class FlowService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); } - $changeTypeArr = UserStockHkdLogModel::group('change_type')->column('change_type'); + $changeTypeArr = UserStockBlockLogModel::group('change_type')->column('change_type'); if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; @@ -1053,9 +781,9 @@ class FlowService extends AdminBaseService } // 列表 - $list = UserStockHkdLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); + $list = UserStockBlockLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 - $total = UserStockHkdLogModel::where($where)->where($whereU) + $total = UserStockBlockLogModel::where($where)->where($whereU) ->count(); $rows = []; @@ -1084,88 +812,11 @@ class FlowService extends AdminBaseService return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage()]); } } - // 香港股票 - public function StockLogs($param, $adminId) - { - try { - // 参数校验 - validate(FlowValidate::class)->scene('us_stock')->check($param); - $where = []; - $userId = 0; - // 用户号精确搜索 - 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' => [], ]); - } - $userId = $user['user_id']; - } - - // 判断是否是代理 如果是代理 只能看他自己管理的用户 - $whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); - if (!is_array($whereU)) { - return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); - } - - $changeTypeArr = UserStockHkdLogModel::group('change_type')->column('change_type'); - - 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); - if (empty($table_obj)) { - return $this->toData('1', '数据异常'); - } - - // 交易对 - if (!empty($param['stock_id'])) { - $where['stock_id'] = $param['stock_id']; - } - - if (!empty($param['start_time']) && !empty($param['end_time'])) { - $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; - } - - // 列表 - $list = Db::table($table_obj['log_table'])->where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); - // 总数 - $total = Db::table($table_obj['log_table'])->where($where)->where($whereU) - ->count(); - - $rows = []; - if (!$list->isEmpty()) { - $rows = $list->toArray(); - // 获取用户号 - $userIdArr = []; - foreach ($list as $idItem) { - $userIdArr[] = $idItem['user_id']; - } - - $userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); - foreach ($rows as $key => $item) { - $rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 - } - } - - return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extend' => [ - 'change_type_list' => (new BaseHomeService())->getCapitalTypeList($changeTypeArr) - ]]); - } catch (ValidateException $validateException) { - // 参数校验失败 - $message = $validateException->getError(); - return $this->toData('1', $message); - } catch (\Exception $exception) { - return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(),$exception->getTrace()]); - } - } - - // 印度期权 - public function inOptionStock($param, $adminId) - { + public function forexList($param, $adminId){ try { // 参数校验 - validate(FlowValidate::class)->scene('hk_stock')->check($param); + validate(FlowValidate::class)->scene('block_stock')->check($param); $where = []; $userId = 0; @@ -1184,7 +835,7 @@ class FlowService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); } - $changeTypeArr = UserStockOptionInrLogModel::group('change_type')->column('change_type'); + $changeTypeArr = UserForexLogModel::group('change_type')->column('change_type'); if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; @@ -1193,15 +844,14 @@ class FlowService extends AdminBaseService $where['stock_id'] = $param['stock_id']; } - if (!empty($param['start_time']) && !empty($param['end_time'])) { $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; } // 列表 - $list = UserStockOptionInrLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); + $list = UserForexLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 - $total = UserStockOptionInrLogModel::where($where)->where($whereU) + $total = UserForexLogModel::where($where)->where($whereU) ->count(); $rows = []; @@ -1231,9 +881,7 @@ class FlowService extends AdminBaseService } } - // 香股 - public function blockStock($param, $adminId) - { + public function allList($param, $adminId){ try { // 参数校验 validate(FlowValidate::class)->scene('block_stock')->check($param); @@ -1255,7 +903,7 @@ class FlowService extends AdminBaseService return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); } - $changeTypeArr = UserStockBlockLogModel::group('change_type')->column('change_type'); + $changeTypeArr = UserMoneyLogModel::group('change_type')->column('change_type'); if (!empty($param['change_type']) && in_array($param['change_type'], $changeTypeArr)) $where['change_type'] = $param['change_type']; @@ -1269,9 +917,9 @@ class FlowService extends AdminBaseService } // 列表 - $list = UserStockBlockLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); + $list = UserMoneyLogModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 - $total = UserStockBlockLogModel::where($where)->where($whereU) + $total = UserMoneyLogModel::where($where)->where($whereU) ->count(); $rows = []; diff --git a/app/admin/service/RechargeService.php b/app/admin/service/RechargeService.php index ba5b0b6..e758e49 100644 --- a/app/admin/service/RechargeService.php +++ b/app/admin/service/RechargeService.php @@ -8,6 +8,7 @@ use app\model\FileModel; use app\model\PaymentListModel; use app\model\RechargeApplyModel; use app\model\UserModel; +use think\facade\Cache; class RechargeService extends AdminBaseService { @@ -50,6 +51,7 @@ class RechargeService extends AdminBaseService $where['update_time'] = ['between time', [$param['start_time'], $param['end_time']]]; } + Cache::store('redis')->set('Recharge_Read_Time'.$adminId,time()); // 列表 $list = RechargeApplyModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); // 总数 @@ -141,7 +143,11 @@ class RechargeService extends AdminBaseService if ($info['is_check'] == 0) { if ($param['check_status'] == 1) { - $result = $this->updateUserAsset($info['user_id'], $info['account_type'], 1, $info['market_amount'], 0, $info['order_no']); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $result = $this->updateUserAssetNew($info['user_id'], 1, $info['market_amount'], 0, $info['order_no']); + }else{ + $result = $this->updateUserAsset($info['user_id'], $info['account_type'], 1, $info['market_amount'], 0, $info['order_no']); + } if ($result['status'] == 200) { RechargeApplyModel::where('id', $info['id'])->update([ 'is_check' => 1, @@ -149,7 +155,7 @@ class RechargeService extends AdminBaseService 'deal_time' => date('Y-m-d H:i:s') ]); } else { - return $this->toData('1015', '系统异常 请稍后重试'); + return $this->toData('1015', $result['msg'],$result['data']); } } else { RechargeApplyModel::where('id', $info['id'])->update([ diff --git a/app/admin/service/UserService.php b/app/admin/service/UserService.php index fc3eb2a..67109b2 100644 --- a/app/admin/service/UserService.php +++ b/app/admin/service/UserService.php @@ -13,8 +13,10 @@ use app\model\UserContractModel; use app\model\UserContractSecModel; use app\model\UserDigitalModel; use app\model\UserForexModel; +use app\model\UserLoanModel; use app\model\UserLoginLog; use app\model\UserModel; +use app\model\UserMoneyModel; use app\model\UserStockBrlModel; use app\model\UserStockEurModel; use app\model\UserStockFurModel; @@ -43,7 +45,7 @@ class UserService extends AdminBaseService try { // 参数校验 validate(UserValidate::class)->scene('index')->check($param); - + Cache::store('redis')->set('User_Read_Time'.$adminId,time()); $where = []; // 邮箱搜索 if (!empty($param['email']) && trim($param['email'])) { @@ -130,80 +132,87 @@ class UserService extends AdminBaseService // 查询父级 $parentNos = UserModel::where('user_id', 'in', $parentIdArr)->column('user_no', 'user_id'); - // 查询用户余额 - $userContractList = UserContractModel::where('user_id', 'in', $userIdArr) - ->where('contract_id', 'USDT') - ->column('usable_num,frozen_num', 'user_id'); - // 查询用户余额 - $userContractSecList = UserContractSecModel::where('user_id', 'in', $userIdArr) - ->where('contract_id', 'USDT') - ->column('usable_num,frozen_num', 'user_id'); - $userStockList = UserStockModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'USD') - ->column('usable_num,frozen_num', 'user_id'); - $userDigitalList = UserDigitalModel::where('user_id', 'in', $userIdArr) - ->where('digital_id', 'USDT') - ->column('usable_num,frozen_num', 'user_id'); - - // 印尼资产 - $userStockIdrList = UserStockIdnModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'IDR') - ->column('usable_num,frozen_num', 'user_id'); - - // 泰股资产 - $userStockThaList = UserStockThaModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'THB') - ->column('usable_num,frozen_num', 'user_id'); - - // 马股资产 - $userStockMysList = UserStockMysModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'MYR') - ->column('usable_num,frozen_num', 'user_id'); - - // 印度股票资产 - $userStockInList = UserStockInModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'INR') - ->column('usable_num,frozen_num', 'user_id'); - //新加坡股票资产 - $userStockSGDList = UserStockSgdModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'SGD') - ->column('usable_num,frozen_num', 'user_id'); - //基金资产 - $userStockFundList = UserStockFundModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'USD') - ->column('usable_num,frozen_num', 'user_id'); - //印度期权 - $userStockOptionInrList = UserStockOptionInrModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'INR') - ->column('usable_num,frozen_num', 'user_id'); - //港股 - $userStockHkList = UserStockHkdModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'HKD') - ->column('usable_num,frozen_num', 'user_id'); - //英股 - $userStockUkList = UserStockGBXModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'GBX') - ->column('usable_num,frozen_num', 'user_id'); - //法股 - $userStockFurList = UserStockFurModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'EUR') - ->column('usable_num,frozen_num', 'user_id'); - //德股 - $userStockEurList = UserStockEurModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'EUR') - ->column('usable_num,frozen_num', 'user_id'); - //巴西 - $userStockBrlList = UserStockBrlModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'BRL') - ->column('usable_num,frozen_num', 'user_id'); - - $userStockJpList = UserStockJpModel::where('user_id', 'in', $userIdArr) - ->where('stock_id', 'JPY') - ->column('usable_num,frozen_num', 'user_id'); - //外汇 - $userForexList = UserForexModel::where('user_id', 'in', $userIdArr) - ->where('contract_id', 'USD') - ->column('usable_num,frozen_num', 'user_id'); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $userMoneyList=UserMoneyModel::where('user_id', 'in', $userIdArr) ->where('stock_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + }else{ + // 查询用户余额 + $userContractList = UserContractModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'USDT') + ->column('usable_num,frozen_num', 'user_id'); + // 查询用户余额 + $userContractSecList = UserContractSecModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'USDT') + ->column('usable_num,frozen_num', 'user_id'); + $userStockList = UserStockModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + $userDigitalList = UserDigitalModel::where('user_id', 'in', $userIdArr) + ->where('digital_id', 'USDT') + ->column('usable_num,frozen_num', 'user_id'); + + // 印尼资产 + $userStockIdrList = UserStockIdnModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'IDR') + ->column('usable_num,frozen_num', 'user_id'); + + // 泰股资产 + $userStockThaList = UserStockThaModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'THB') + ->column('usable_num,frozen_num', 'user_id'); + + // 马股资产 + $userStockMysList = UserStockMysModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'MYR') + ->column('usable_num,frozen_num', 'user_id'); + + // 印度股票资产 + $userStockInList = UserStockInModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'INR') + ->column('usable_num,frozen_num', 'user_id'); + //新加坡股票资产 + $userStockSGDList = UserStockSgdModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'SGD') + ->column('usable_num,frozen_num', 'user_id'); + //基金资产 + $userStockFundList = UserStockFundModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + //印度期权 + $userStockOptionInrList = UserStockOptionInrModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'INR') + ->column('usable_num,frozen_num', 'user_id'); + //港股 + $userStockHkList = UserStockHkdModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'HKD') + ->column('usable_num,frozen_num', 'user_id'); + //英股 + $userStockUkList = UserStockGBXModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'GBX') + ->column('usable_num,frozen_num', 'user_id'); + //法股 + $userStockFurList = UserStockFurModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'EUR') + ->column('usable_num,frozen_num', 'user_id'); + //德股 + $userStockEurList = UserStockEurModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'EUR') + ->column('usable_num,frozen_num', 'user_id'); + //巴西 + $userStockBrlList = UserStockBrlModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'BRL') + ->column('usable_num,frozen_num', 'user_id'); + + $userStockJpList = UserStockJpModel::where('user_id', 'in', $userIdArr) + ->where('stock_id', 'JPY') + ->column('usable_num,frozen_num', 'user_id'); + //外汇 + $userForexList = UserForexModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'USD') + ->column('usable_num,frozen_num', 'user_id'); + } + + //最近登录IP、最近登录国家 @@ -213,7 +222,9 @@ class UserService extends AdminBaseService ->join([$subQuery => 'w'], 'a.user_id=w.user_id AND a.login_date=w.last_login_date')->column(['id', 'ip', 'country', 'city'], 'a.user_id'); foreach ($userList as $item) { - $rows[] = [ + $key = 'LEVERAGE:' . $item['user_id']; + $leverage_num=empty(Cache::store('redis')->get($key))? 1: Cache::store('redis')->get($key); + $userRow= [ 'id' => $item['user_id'], 'user_no' => $item['user_no'], 'nickname' => $item['nick_name'], @@ -223,47 +234,192 @@ class UserService extends AdminBaseService 'invite_code' => $item['invite_code'], 'email' => $item['email'], 'mobile' => $item['country_code'] . '-' . $item['phone_number'], - + 'rechargeAmount' => 0, + 'withdrawalAmount' => 0, + 'regIp' => $item['reg_ip'], + 'status' => $item['status'], + 'statusName' => UserModel::$statusMap[$item['status']] ?? '-', + 'loginTime' => $item['last_login_time'], + 'is_real' => $item['is_real'], + 'real_status' => $item['real_status'], + 'lever_status' => $item['lever_status'], + 'is_test_user' => $item['is_test_user'], + 'is_test_user_text' => UserModel::$isTestUserMap[$item['is_test_user']] ?? '-', + 'last_ip' => $lastLoginLog[$item['user_id']]['ip'] ?? '-', + 'last_country' => empty($lastLoginLog[$item['user_id']]['country']) ? '-' : json_decode($lastLoginLog[$item['user_id']]['country'], true)['en'], + 'agent_id' => $item['agent_id'], + 'agent_name' => $item['agent_id'] > 0 ? $agentNameArr[$item['agent_id']] ?? '-' : '-', + 'leverage_num'=>$leverage_num + ]; + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $userRow['money'] = $userMoneyList[$item['user_id']]['usable_num'] ?? '0'; + $userRow['money_frozen']=$userMoneyList[$item['user_id']]['frozen_num'] ?? '0'; + }else{ //余额 - 'digital' => $userDigitalList[$item['user_id']]['usable_num'] ?? '0', - 'stock' => $userStockList[$item['user_id']]['usable_num'] ?? '0', - 'contract' => $userContractList[$item['user_id']]['usable_num'] ?? '0', - 'contract_sec' => $userContractSecList[$item['user_id']]['usable_num'] ?? '0', - 'forex' => $userForexList[$item['user_id']]['usable_num'] ?? '0',//外汇 - 'stock_idn' => $userStockIdrList[$item['user_id']]['usable_num'] ?? '0', // 印尼股票余额 - 'stock_tha' => $userStockThaList[$item['user_id']]['usable_num'] ?? '0', // 泰股资产 - 'stock_mys' => $userStockMysList[$item['user_id']]['usable_num'] ?? '0', // 马股资产 - 'stock_in' => $userStockInList[$item['user_id']]['usable_num'] ?? '0', // 印度股资产 - 'stock_sgd' => $userStockSGDList[$item['user_id']]['usable_num'] ?? '0', // 新加坡股资产 - 'stock_fund' => $userStockFundList[$item['user_id']]['usable_num'] ?? '0', // 基金资产 - 'stock_option_in' => $userStockOptionInrList[$item['user_id']]['usable_num'] ?? '0', // 印度期权资产 - 'stock_hk' => $userStockHkList[$item['user_id']]['usable_num'] ?? '0', // 香港股资产 - 'stock_uk' => $userStockUkList[$item['user_id']]['usable_num'] ?? '0', // 英股资产 - 'stock_fur' => $userStockFurList[$item['user_id']]['usable_num'] ?? '0', // 法股资产 - 'stock_eur' => $userStockEurList[$item['user_id']]['usable_num'] ?? '0', // 德股资产 - 'stock_brl' => $userStockBrlList[$item['user_id']]['usable_num'] ?? '0', // 巴西股资产 - 'stock_jp' => $userStockJpList[$item['user_id']]['usable_num'] ?? '0', // 巴西股资产 - + $userRow['digital'] = $userDigitalList[$item['user_id']]['usable_num'] ?? '0'; + $userRow['stock'] = $userStockList[$item['user_id']]['usable_num'] ?? '0'; + $userRow['contract'] = $userContractList[$item['user_id']]['usable_num'] ?? '0'; + $userRow['contract_sec'] = $userContractSecList[$item['user_id']]['usable_num'] ?? '0'; + $userRow['forex'] = $userForexList[$item['user_id']]['usable_num'] ?? '0';//外汇 + $userRow['stock_idn']=$userStockIdrList[$item['user_id']]['usable_num'] ?? '0'; // 印尼股票余额 + $userRow['stock_tha']=$userStockThaList[$item['user_id']]['usable_num'] ?? '0'; // 泰股资产 + $userRow['stock_mys']=$userStockMysList[$item['user_id']]['usable_num'] ?? '0'; // 马股资产 + $userRow['stock_in']=$userStockInList[$item['user_id']]['usable_num'] ?? '0';// 印度股资产 + $userRow['stock_sgd']=$userStockSGDList[$item['user_id']]['usable_num'] ?? '0'; // 新加坡股资产 + $userRow['stock_fund']=$userStockFundList[$item['user_id']]['usable_num'] ?? '0'; // 基金资产 + $userRow['stock_option_in']=$userStockOptionInrList[$item['user_id']]['usable_num'] ?? '0'; // 印度期权资产 + $userRow['stock_hk']=$userStockHkList[$item['user_id']]['usable_num'] ?? '0';// 香港股资产 + $userRow['stock_uk']=$userStockUkList[$item['user_id']]['usable_num'] ?? '0'; // 英股资产 + $userRow['stock_fur']=$userStockFurList[$item['user_id']]['usable_num'] ?? '0'; // 法股资产 + $userRow['stock_eur']=$userStockEurList[$item['user_id']]['usable_num'] ?? '0'; // 德股资产 + $userRow['stock_brl']=$userStockBrlList[$item['user_id']]['usable_num'] ?? '0'; // 巴西股资产 + $userRow['stock_jp']=$userStockJpList[$item['user_id']]['usable_num'] ?? '0';// 巴西股资产 //冻结资金 - 'digital_frozen' => $userDigitalList[$item['user_id']]['frozen_num'] ?? '0', - 'stock_frozen' => $userStockList[$item['user_id']]['frozen_num'] ?? '0', - 'contract_frozen' => $userContractList[$item['user_id']]['frozen_num'] ?? '0', - 'forex_frozen' => $userForexList[$item['user_id']]['frozen_num'] ?? '0', - 'contract_sec_frozen' => $userContractSecList[$item['user_id']]['frozen_num'] ?? '0', - 'stock_idn_frozen' => $userStockIdrList[$item['user_id']]['frozen_num'] ?? '0', // 印尼股票余额 - 'stock_tha_frozen' => $userStockThaList[$item['user_id']]['frozen_num'] ?? '0', // 泰股资产 - 'stock_mys_frozen' => $userStockMysList[$item['user_id']]['frozen_num'] ?? '0', // 马股资产 - 'stock_in_frozen' => $userStockInList[$item['user_id']]['frozen_num'] ?? '0', // 印度股资产 - 'stock_sgd_frozen' => $userStockSGDList[$item['user_id']]['frozen_num'] ?? '0', // 新加坡股资产 - 'stock_fund_frozen' => $userStockFundList[$item['user_id']]['frozen_num'] ?? '0', // 基金资产 - 'stock_option_in_frozen' => $userStockOptionInrList[$item['user_id']]['frozen_num'] ?? '0', // 印度期权资产 - 'stock_hk_frozen' => $userStockHkList[$item['user_id']]['frozen_num'] ?? '0', // 香港股资产 - 'stock_uk_frozen' => $userStockUkList[$item['user_id']]['frozen_num'] ?? '0', // 英港股资产 - 'stock_fur_frozen' => $userStockFurList[$item['user_id']]['frozen_num'] ?? '0', // 法股资产 - 'stock_eur_frozen' => $userStockEurList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 - 'stock_brl_frozen' => $userStockBrlList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 - 'stock_jp_frozen' => $userStockJpList[$item['user_id']]['frozen_num'] ?? '0', // 德股资产 + $userRow['digital_frozen']=$userDigitalList[$item['user_id']]['frozen_num'] ?? '0'; + $userRow['stock_frozen']=$userStockList[$item['user_id']]['frozen_num'] ?? '0'; + $userRow['contract_frozen']=$userContractList[$item['user_id']]['frozen_num'] ?? '0'; + $userRow['forex_frozen']=$userForexList[$item['user_id']]['frozen_num'] ?? '0'; + $userRow['contract_sec_frozen']=$userContractSecList[$item['user_id']]['frozen_num'] ?? '0'; + $userRow['stock_idn_frozen']=$userStockIdrList[$item['user_id']]['frozen_num'] ?? '0'; // 印尼股票余额 + $userRow['stock_tha_frozen']=$userStockThaList[$item['user_id']]['frozen_num'] ?? '0'; // 泰股资产 + $userRow['stock_mys_frozen']=$userStockMysList[$item['user_id']]['frozen_num'] ?? '0'; // 马股资产 + $userRow['stock_in_frozen']=$userStockInList[$item['user_id']]['frozen_num'] ?? '0';// 印度股资产 + $userRow['stock_sgd_frozen']=$userStockSGDList[$item['user_id']]['frozen_num'] ?? '0'; // 新加坡股资产 + $userRow['stock_fund_frozen']=$userStockFundList[$item['user_id']]['frozen_num'] ?? '0'; // 基金资产 + $userRow['stock_option_in_frozen']=$userStockOptionInrList[$item['user_id']]['frozen_num'] ?? '0';// 印度期权资产 + $userRow['stock_hk_frozen']=$userStockHkList[$item['user_id']]['frozen_num'] ?? '0'; // 香港股资产 + $userRow['stock_uk_frozen']=$userStockUkList[$item['user_id']]['frozen_num'] ?? '0'; // 英港股资产 + $userRow['stock_fur_frozen']=$userStockFurList[$item['user_id']]['frozen_num'] ?? '0'; // 法股资产 + $userRow['stock_eur_frozen']=$userStockEurList[$item['user_id']]['frozen_num'] ?? '0'; // 德股资产 + $userRow['stock_brl_frozen']=$userStockBrlList[$item['user_id']]['frozen_num'] ?? '0'; // 德股资产 + $userRow['stock_jp_frozen']=$userStockJpList[$item['user_id']]['frozen_num'] ?? '0'; // 德股资产 + } + $rows[] =$userRow; + } + } + + return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'extent' => ['market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'is_agent' => $IsAgent, 'agent_list' => $agentNameArr, 'market_rate' => $marketRate, 'market_tape_list' => $tapeList]]); + } catch (ValidateException $validateException) { + // 参数校验失败 + $message = $validateException->getError(); + return $this->toData('1', $message); + } catch (\Exception $exception) { + return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); + } + } + public function RealList($param, $adminId) + { + try { + Cache::store('redis')->set('User_Read_Time'.$adminId,time()); + // 参数校验 + validate(UserValidate::class)->scene('index')->check($param); + + $where = []; + // 邮箱搜索 + if (!empty($param['email']) && trim($param['email'])) { + $where['email'] = $param['email']; + } + + // 用户审核状态筛选 + if (!empty($param['real_status']) && is_numeric($param['real_status'])) { + $where['real_status'] = $param['real_status']; + } + + // 用户号 + if (!empty($param['user_no']) && trim($param['user_no'])) { + $where['user_no'] = $param['user_no']; + } + + // 手机号搜索 + if (!empty($param['phone']) && trim($param['phone'])) { + $where['phone_number'] = $param['phone']; + } + + // 用户审核状态筛选 + if (!empty($param['agent_id']) && is_numeric($param['agent_id'])) { + $where['agent_id'] = $param['agent_id']; + } + + //邀请码 + if (!empty($param['invite_code']) && trim($param['invite_code'])) { + $where['invite_code'] = $param['invite_code']; + } + + // 杠杆申请状态 + if (!empty($param['leve_status']) && is_numeric($param['leve_status'])) { + $where['leve_status'] = $param['leve_status']; + } + + // 测试用户 + if (!empty($param['is_test_user']) && is_numeric($param['is_test_user'])) { + $where['is_test_user'] = $param['is_test_user']; + } + + // 注册时间 + if (!empty($param['start_time']) && !empty($param['end_time'])) { + $where['create_time'] = ['between time', [$param['start_time'], $param['end_time']]]; + } + + $IsAgent = AdminModel::checkUserIsAgent($adminId); + $agentNameArr = AdminModel::where('role_id', 10)->column('user_name', 'id'); + + $marketRate = StockMarketModel::column('rate', 'stock_market_type'); + $tapeList = (new StockMarketModel)->getAllTape(); + // 父级用户号 + if (!empty($param['parent_user_no']) && trim($param['parent_user_no'])) { + $parentUser = UserModel::where('user_no', $param['parent_user_no'])->find(); + if (empty($parentUser)) { + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => ['market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'is_agent' => $IsAgent, 'agent_list' => $agentNameArr, 'market_rate' => $marketRate, 'market_tape_list' => $tapeList]]); + } + $where['parent_id'] = $parentUser->user_id; + } + + if (!empty($where['user_id']) && is_numeric($where['user_id']) && $where['user_id'] == 0) { + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => ['market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'is_agent' => $IsAgent, 'agent_list' => $agentNameArr, 'market_rate' => $marketRate, 'market_tape_list' => $tapeList]]); + } + + $whereU = $this->getWhereByIsAgentAndUserId($adminId, [], 0); + if (!is_array($whereU)) { + return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => ['market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'is_agent' => $IsAgent, 'agent_list' => $agentNameArr, 'market_rate' => $marketRate, 'market_tape_list' => $tapeList]]); + } + $userList = UserModel::where($where)->where($whereU) + ->where('real_status',2)->page($param['page'], $param['limit'])->order('user_id', 'desc')->select(); + $total = UserModel::where($where)->where($whereU) ->where('real_status',2)->count(); + + $rows = []; + if (!empty($userList)) { + $userIdArr = []; + $parentIdArr = []; + foreach ($userList as $value) { + $userIdArr[] = $value['user_id']; + if ($value['parent_id'] > 0) { + $parentIdArr[] = $value['parent_id']; + } + } + + // 查询父级 + $parentNos = UserModel::where('user_id', 'in', $parentIdArr)->column('user_no', 'user_id'); + + //最近登录IP、最近登录国家 + $subQuery = UserLoginLog::field('user_id,MAX(login_date) AS last_login_date') + ->where('user_id', 'in', $userIdArr)->group('user_id')->buildSql(); + $lastLoginLog = UserLoginLog::alias('a')->field('a.id') + ->join([$subQuery => 'w'], 'a.user_id=w.user_id AND a.login_date=w.last_login_date')->column(['id', 'ip', 'country', 'city'], 'a.user_id'); + + foreach ($userList as $item) { + $key = 'LEVERAGE:' . $item['user_id']; + $leverage_num=empty(Cache::store('redis')->get($key))? 1: Cache::store('redis')->get($key); + $userRow= [ + 'id' => $item['user_id'], + 'user_no' => $item['user_no'], + 'nickname' => $item['nick_name'], + 'regTime' => $item['create_time'], + 'parentNo' => $parentNos[$item['parent_id']] ?? '-', + 'parent_id' => $item['parent_id'], + 'invite_code' => $item['invite_code'], + 'email' => $item['email'], + 'mobile' => $item['country_code'] . '-' . $item['phone_number'], 'rechargeAmount' => 0, 'withdrawalAmount' => 0, 'regIp' => $item['reg_ip'], @@ -279,7 +435,9 @@ class UserService extends AdminBaseService 'last_country' => empty($lastLoginLog[$item['user_id']]['country']) ? '-' : json_decode($lastLoginLog[$item['user_id']]['country'], true)['en'], 'agent_id' => $item['agent_id'], 'agent_name' => $item['agent_id'] > 0 ? $agentNameArr[$item['agent_id']] ?? '-' : '-', + 'leverage_num'=>$leverage_num ]; + $rows[] =$userRow; } } @@ -293,7 +451,6 @@ class UserService extends AdminBaseService } } - // 修改用户状态 public function status($param, $adminId) { @@ -356,133 +513,144 @@ class UserService extends AdminBaseService $rate = 0; $marketArr = StockMarketModel::column('rate', 'unit'); - // 查询账户余额 - switch ($param['type']) { - case '1': //现货 - $originMoney = UserDigitalModel::where('user_id', $param['id'])->value('usable_num'); - - $rate = 1; - break; - case '2': //合约 - $originMoney = UserContractModel::where('user_id', $param['id'])->value('usable_num'); - - $rate = 1; - break; - case '3': //美股 - $originMoney = UserStockModel::where('user_id', $param['id']) - ->where('stock_id', 'USD') - ->value('usable_num'); - - $rate = $marketArr['USD'] ?? 0; - break; - case '4': - $originMoney = UserStockIdnModel::where('user_id', $param['id']) - ->where('stock_id', 'IDR') - ->value('usable_num'); - - $rate = $marketArr['IDR'] ?? 0; - break; - case '5': - $originMoney = UserStockMysModel::where('user_id', $param['id']) - ->where('stock_id', 'MYR') - ->value('usable_num'); - - $rate = $marketArr['MYR'] ?? 0; - break; - case '6': - $originMoney = UserStockThaModel::where('user_id', $param['id']) - ->where('stock_id', 'THB') - ->value('usable_num'); - - $rate = $marketArr['THB'] ?? 0; - break; - case '7': - $originMoney = UserStockInModel::where('user_id', $param['id']) - ->where('stock_id', 'INR') - ->value('usable_num'); - - $rate = $marketArr['INR'] ?? 0; - break; - case '8': //秒合约 - $originMoney = UserContractSecModel::where('user_id', $param['id'])->value('usable_num'); - - $rate = 1; - break; - case '9': - $originMoney = UserStockSgdModel::where('user_id', $param['id']) - ->where('stock_id', 'SGD') - ->value('usable_num'); - - $rate = $marketArr['SGD'] ?? 0; - break; - - case '10': - $originMoney = UserStockFundModel::where('user_id', $param['id']) - ->where('stock_id', 'USD') - ->value('usable_num'); - - $rate = $marketArr['USD'] ?? 0; - break; - case '11': - $originMoney = UserStockOptionInrModel::where('user_id', $param['id']) - ->where('stock_id', 'INR') - ->value('usable_num'); - - $rate = $marketArr['INR'] ?? 0; - break; - case '12': - $originMoney = UserStockHkdModel::where('user_id', $param['id']) - ->where('stock_id', 'HKD') - ->value('usable_num'); - - $rate = $marketArr['HKD'] ?? 0; - break; - case '14': - $originMoney = UserStockGBXModel::where('user_id', $param['id']) - ->where('stock_id', 'GBX') - ->value('usable_num'); - - $rate = $marketArr['GBX'] ?? 0; - break; - case '15': - $originMoney = UserStockFurModel::where('user_id', $param['id']) - ->where('stock_id', 'EUR') - ->value('usable_num'); - - $rate = $marketArr['EUR'] ?? 0; - break; - case '16': - $originMoney = UserStockEurModel::where('user_id', $param['id']) - ->where('stock_id', 'EUR') - ->value('usable_num'); - - $rate = $marketArr['EUR'] ?? 0; - break; - case '17': - $originMoney = UserStockBrlModel::where('user_id', $param['id']) - ->where('stock_id', 'BRL') - ->value('usable_num'); - - $rate = $marketArr['BRL'] ?? 0; - break; - case '18': - $originMoney = UserStockJpModel::where('user_id', $param['id']) - ->where('stock_id', 'JPY') - ->value('usable_num'); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $user_money=UserMoneyModel::getUserUSDByUserId(['user_id'=>$param['id']]); + $originMoney=$user_money['usable_num']; +// $originMoney = UserMoneyModel::where('user_id', $param['id']) +// ->where('stock_id', 'USD') +// ->value('usable_num'); + $rate = 1; + }else{ + // 查询账户余额 + switch ($param['type']) { + case '1': //现货 + $originMoney = UserDigitalModel::where('user_id', $param['id'])->value('usable_num'); + + $rate = 1; + break; + case '2': //合约 + $originMoney = UserContractModel::where('user_id', $param['id'])->value('usable_num'); + + $rate = 1; + break; + case '3': //美股 + $originMoney = UserStockModel::where('user_id', $param['id']) + ->where('stock_id', 'USD') + ->value('usable_num'); + + $rate = $marketArr['USD'] ?? 0; + break; + case '4': + $originMoney = UserStockIdnModel::where('user_id', $param['id']) + ->where('stock_id', 'IDR') + ->value('usable_num'); + + $rate = $marketArr['IDR'] ?? 0; + break; + case '5': + $originMoney = UserStockMysModel::where('user_id', $param['id']) + ->where('stock_id', 'MYR') + ->value('usable_num'); + + $rate = $marketArr['MYR'] ?? 0; + break; + case '6': + $originMoney = UserStockThaModel::where('user_id', $param['id']) + ->where('stock_id', 'THB') + ->value('usable_num'); + + $rate = $marketArr['THB'] ?? 0; + break; + case '7': + $originMoney = UserStockInModel::where('user_id', $param['id']) + ->where('stock_id', 'INR') + ->value('usable_num'); + + $rate = $marketArr['INR'] ?? 0; + break; + case '8': //秒合约 + $originMoney = UserContractSecModel::where('user_id', $param['id'])->value('usable_num'); + + $rate = 1; + break; + case '9': + $originMoney = UserStockSgdModel::where('user_id', $param['id']) + ->where('stock_id', 'SGD') + ->value('usable_num'); + + $rate = $marketArr['SGD'] ?? 0; + break; + + case '10': + $originMoney = UserStockFundModel::where('user_id', $param['id']) + ->where('stock_id', 'USD') + ->value('usable_num'); + + $rate = $marketArr['USD'] ?? 0; + break; + case '11': + $originMoney = UserStockOptionInrModel::where('user_id', $param['id']) + ->where('stock_id', 'INR') + ->value('usable_num'); + + $rate = $marketArr['INR'] ?? 0; + break; + case '12': + $originMoney = UserStockHkdModel::where('user_id', $param['id']) + ->where('stock_id', 'HKD') + ->value('usable_num'); + + $rate = $marketArr['HKD'] ?? 0; + break; + case '14': + $originMoney = UserStockGBXModel::where('user_id', $param['id']) + ->where('stock_id', 'GBX') + ->value('usable_num'); + + $rate = $marketArr['GBX'] ?? 0; + break; + case '15': + $originMoney = UserStockFurModel::where('user_id', $param['id']) + ->where('stock_id', 'EUR') + ->value('usable_num'); + + $rate = $marketArr['EUR'] ?? 0; + break; + case '16': + $originMoney = UserStockEurModel::where('user_id', $param['id']) + ->where('stock_id', 'EUR') + ->value('usable_num'); + + $rate = $marketArr['EUR'] ?? 0; + break; + case '17': + $originMoney = UserStockBrlModel::where('user_id', $param['id']) + ->where('stock_id', 'BRL') + ->value('usable_num'); + + $rate = $marketArr['BRL'] ?? 0; + break; + case '18': + $originMoney = UserStockJpModel::where('user_id', $param['id']) + ->where('stock_id', 'JPY') + ->value('usable_num'); + + $rate = $marketArr['JPY'] ?? 0; + break; + case '19': + $originMoney = UserForexModel::where('user_id', $param['id']) + ->where('contract_id', 'USD') + ->value('usable_num'); + + $rate = $marketArr['USD'] ?? 0; + break; + default: + return $this->toData('1', '无权操作'); + break; + } + } - $rate = $marketArr['JPY'] ?? 0; - break; - case '19': - $originMoney = UserForexModel::where('user_id', $param['id']) - ->where('stock_id', 'USD') - ->value('usable_num'); - $rate = $marketArr['USD'] ?? 0; - break; - default: - return $this->toData('1', '无权操作'); - break; - } $diff = bcsub($amount, $originMoney, 18); // 未进行修改 @@ -502,7 +670,12 @@ class UserService extends AdminBaseService //正式用户 && 给用户加钱 -> 需要写入变更日志 $changeLogAdminId = ($user->is_test_user == 1 && abs($diff) > 0) ? $adminId : 0; // 执行修改账户额度 - $res = $this->updateUserAsset($userId, $type, $operateType, $diff, 0, "", $changeLogAdminId, $rate); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $res = $this->updateUserAssetNew($userId, $operateType, $diff); + }else{ + $res = $this->updateUserAsset($userId, $type, $operateType, $diff, 0, "", $changeLogAdminId, $rate); + } + if (isset($res['status']) && $res['status'] == 200) { return $this->toData('0', 'SUCCESS'); } @@ -998,6 +1171,83 @@ class UserService extends AdminBaseService return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); } } + public function getUserLoan($param,$adminId) + { + try { + $where = []; + $userId = 0; + // 用户号精确搜索 + 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' => [], 'extent' => ['totalMoney' => 0]]); + } + $userId = $user['user_id']; + } + + // 判断是否是代理 如果是代理 只能看他自己管理的用户 + $where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); + + if(isset($param['status'])){ + $where['status']=intval($param['status']); + } + + $data['where']=$where; + + $data['page']=isset($param['page']) ? intval($param['page']) : 1; + $data['size']=isset($param['size']) ? intval($param['size']) : 10; + + $list = UserLoanModel::getUserLoanList($data); + if(!empty($list['list'])){ + foreach ($list['list'] as $key=>$item){ + $user= UserModel::where('user_id', $item['user_id'])->find(); + $list['list'][$key]['nick_name']=$user->nick_name; + } + } + + + return $this->toData('0', 'SUCCESS', $list); + } catch (\Exception $exception) { + return $this->toData('1', '系统繁忙', [$exception->getMessage(),$exception->getTrace()]); + } + } + public function dealUserLoan($param,$adminId) + { + try { + $where = []; + $userId = 0; + // 用户号精确搜索 + 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' => [], 'extent' => ['totalMoney' => 0]]); + } + $userId = $user['user_id']; + } + + // 判断是否是代理 如果是代理 只能看他自己管理的用户 + $where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); + + $where['id']=intval($param['id']); + + $info=UserLoanModel::where($where)->find(); + if(empty($info)){ + return $this->toData('1', '数据不存在'); + } + if($info['status']!=0){ + return $this->toData('1', '数据已审核'); + } + + UserLoanModel::where($where)->update([ + 'status'=>intval($param['status']), + 'update_time'=>date('Y-m-d H:i:s') + ]); + + return $this->toData('0', 'SUCCESS', []); + } catch (\Exception $exception) { + return $this->toData('1', '系统繁忙', [$exception->getMessage()]); + } + } } diff --git a/app/admin/service/WithdrawService.php b/app/admin/service/WithdrawService.php index 81e314f..225a07f 100644 --- a/app/admin/service/WithdrawService.php +++ b/app/admin/service/WithdrawService.php @@ -17,6 +17,7 @@ use app\model\PaymentListModel; use app\model\UserBankModel; use app\model\UserModel; use app\model\UserWithdrawalModel; +use think\facade\Cache; use function AlibabaCloud\Client\backgroundRed; class WithdrawService extends AdminBaseService @@ -25,8 +26,10 @@ class WithdrawService extends AdminBaseService public function index($param, $adminId) { try { + // 参数校验 validate(WithdrawValidate::class)->scene('index')->check($param); + Cache::store('redis')->set('Withdraw_Read_Time'.$adminId,time()); $where = []; $userId = 0; // 用户号精确搜索 @@ -61,6 +64,8 @@ class WithdrawService extends AdminBaseService // 统计 提现成功 $sum = UserWithdrawalModel::where($where)->where($whereU)->where('status', 4)->sum('apply_num'); + + $rows = []; if (!$list->isEmpty()) { // 获取用户号 @@ -164,18 +169,32 @@ class WithdrawService extends AdminBaseService $update_data['update_time'] = date('Y-m-d H:i:s'); //拒绝 if ($param['status'] == 2) { - $updateStatus = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $updateStatus = $this->updateUserAssetNew($order_info['user_id'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + }else{ + $updateStatus = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + } + } //代付 if ($param['status'] == 3) { //解冻资金 ,扣除提现 - $updateOne = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $updateOne = $this->updateUserAssetNew($order_info['user_id'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + }else{ + $updateOne = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + } + if (!empty($updateOne) && $updateOne['status'] == 200) { - $updateStatus = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 2, -$order_info['market_amount'], 0, $order_info['order_no']); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $updateStatus = $this->updateUserAssetNew($order_info['user_id'], 2, -$order_info['market_amount'], 0, $order_info['order_no']); + }else{ + $updateStatus = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 2, -$order_info['market_amount'], 0, $order_info['order_no']); + } + } else { //提现事务回滚... -// $updateOne = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 5, -$order_info['market_amount'], +$order_info['market_amount'], $order_info['order_no']); trace("提现失败1 - change_status - order_no=" . $order_info['order_no'] . "---user_id= " . $order_info['user_id'] . "---account_type= " . $order_info['account_type'] . "---market_amount= " . $order_info['market_amount']); return $this->toData($updateOne['status'] ?? '3251', $updateOne['msg'] ?? $msg, [$content]); } diff --git a/app/admin/service/setting/BlockStockService.php b/app/admin/service/setting/BlockStockService.php index b2db4ec..717612d 100644 --- a/app/admin/service/setting/BlockStockService.php +++ b/app/admin/service/setting/BlockStockService.php @@ -4,9 +4,14 @@ namespace app\admin\service\setting; use app\admin\service\AdminBaseService; use app\model\StockBlockListModel; +use app\model\StockBrlListModel; +use app\model\StockEurListModel; +use app\model\StockFurListModel; +use app\model\StockGBXListModel; use app\model\StockHkdListModel; use app\model\StockIdnListModel; use app\model\StockInListModel; +use app\model\StockJpListModel; use app\model\StockListModel; use app\model\StockMysListModel; use app\model\StockSgdListModel; @@ -108,6 +113,26 @@ class BlockStockService extends AdminBaseService $stock = StockHkdListModel::where('stock_code', $param['stock_code'])->find(); if (empty($stock)) return $this->toData('1', 'stock_code 无效'); break; + case '14': + $stock = StockGBXListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '15': + $stock = StockFurListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '16': + $stock = StockEurListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '17': + $stock = StockBrlListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '18': + $stock = StockJpListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; default: return $this->toData('1', '股票市场或股票代码 无效'); } @@ -160,6 +185,8 @@ class BlockStockService extends AdminBaseService $blockStock->forced_closure = $stock->forced_closure; $blockStock->up_limit = $stock->up_limit;; $blockStock->down_limit = $stock->down_limit; + $blockStock->buy_pwd = isset($param['buy_pwd']) ? trim($param['buy_pwd']) : '' ; + $blockStock->create_time = date('Y-m-d H:i:s'); $blockStock->update_time = date('Y-m-d H:i:s'); $blockStock->save(); @@ -182,7 +209,8 @@ class BlockStockService extends AdminBaseService 'min' => $blockStock->min, 'start_time' => $blockStock->start_time, 'end_time' => $blockStock->end_time, - 'today_add' => $blockStock->today_add + 'today_add' => $blockStock->today_add, + 'buy_pwd'=>$blockStock->buy_pwd ]); return $this->toData('0', 'SUCCESS'); @@ -253,6 +281,26 @@ class BlockStockService extends AdminBaseService $stock = StockHkdListModel::where('stock_code', $param['stock_code'])->find(); if (empty($stock)) return $this->toData('1', 'stock_code 无效'); break; + case '14': + $stock = StockGBXListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '15': + $stock = StockFurListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '16': + $stock = StockEurListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '17': + $stock = StockBrlListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; + case '18': + $stock = StockJpListModel::where('stock_code', $param['stock_code'])->find(); + if (empty($stock)) return $this->toData('1', 'stock_code 无效'); + break; default: return $this->toData('1', '股票市场或股票代码 无效'); } @@ -309,6 +357,7 @@ class BlockStockService extends AdminBaseService $blockStock->up_limit = $stock->up_limit;; $blockStock->down_limit = $stock->down_limit; $blockStock->update_time = date('Y-m-d H:i:s'); + $blockStock->buy_pwd = trim($param['buy_pwd']); $blockStock->save(); // 加入缓存 @@ -329,7 +378,8 @@ class BlockStockService extends AdminBaseService 'min' => $blockStock->min, 'start_time' => $blockStock->start_time, 'end_time' => $blockStock->end_time, - 'today_add' => $blockStock->today_add + 'today_add' => $blockStock->today_add, + 'buy_pwd'=>$blockStock->buy_pwd, ]); return $this->toData('0', 'SUCCESS'); diff --git a/app/admin/service/setting/ForexService.php b/app/admin/service/setting/ForexService.php index 1dfc4b4..9e9dc20 100644 --- a/app/admin/service/setting/ForexService.php +++ b/app/admin/service/setting/ForexService.php @@ -3,12 +3,9 @@ namespace app\admin\service\setting; use app\admin\service\AdminBaseService; -use app\home\service\BaseHomeService; -use app\model\ContractListMode; -use app\model\ContractSettingModel; -use app\model\ContractTradeModel; use app\model\ForexListModel; -use think\facade\Cache; +use app\model\ForexMarketModel; +use app\admin\validate\setting\HqValidate; class ForexService extends AdminBaseService { @@ -252,19 +249,177 @@ class ForexService extends AdminBaseService public function getTradeNameList($param) { try { - if(isset($param['is_owner']) && in_array($param['is_owner'], [0,1])){ - $list = ForexListModel::where('status', 1)->order('id', 'desc') - ->where('is_owner', $param['is_owner']) - ->column('trade_name', 'id'); - } else { - $list = ForexListModel::where('status', 1)->order('id', 'desc') - ->column('trade_name', 'id'); - } - + $list = ForexListModel::where('status', 1)->order('id', 'desc') + ->column('trade_name', 'id'); return $this->toData('0', 'SUCCESS', ['list' => $list]); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', []); } } + + public function hq_index() + { + try { + $list = ForexMarketModel::where('type', 0)->order('id', 'desc')->select(); + $rows = []; + if(!$list->isEmpty()){ + $rows = $list->toArray(); + } + return $this->toData('0','SUCCSS',['list' => $rows, 'total' => count($rows)]); + }catch (\Exception $exception){ + return $this->toData('1', '系统繁忙', [$exception->getMessage()]); + } + } + + + // 新增 + public function hq_add($param) + { + try { + // 参数校验 + validate(HqValidate::class)->scene('add')->check($param); + + // 已存在未执行的 不能再插入 + $count = ForexMarketModel::where('trade_name', $param['trade_name']) + ->where('is_get',1) + ->where('type', 0) + ->count(); + if($count > 0){ + return $this->toData('1','已存在未执行'); + } + + //判断 + $diff = strtotime($param['end_time']) - strtotime($param['begin_time']); + if($diff > 600 || $diff <=0){ + return $this->toData('1','时间无效-结束时间必须在开始时间十分钟以内'); + } + + // 不能有交叉时间 + $map1 = [ + ['trade_name', '=',$param['trade_name']], + ['begin_time','between', [$param['begin_time'], $param['end_time']]] + ]; + $map2 = [ + ['trade_name', '=',$param['trade_name']], + ['end_time','between', [$param['begin_time'], $param['end_time']]] + ]; + + $count = ForexMarketModel::whereOr([$map1,$map2]) + ->count(); + if($count > 0){ + return $this->toData('1','时间无效-时间不能有交叉'); + } + + $market = new ForexMarketModel; + $market->trade_name = $param['trade_name']; + $market->begin_time = $param['begin_time']; + $market->end_time = $param['end_time']; + $market->max_price = $param['max_price']; + $market->step = $param['step']; + $market->type = 0; + $market->save(); + + // 写入redis + $this->initForexHqData(); + + return $this->toData('0','SUCCESS'); + }catch (ValidateException $validateException){ + return $this->toData('1', $validateException->getMessage(), []); + }catch (\Exception $exception){ + return $this->toData('1', '系统繁忙', [$exception->getMessage()]); + } + } + + + // 编辑 + public function hq_edit($param) + { + try { + // 参数校验 + validate(HqValidate::class)->scene('edit')->check($param); + + // 已存在未执行的 不能再插入 + $count = ForexMarketModel::where('trade_name', $param['trade_name']) + ->where('id', '<>', $param['id']) + ->where('is_get',1) + ->where('type', 0) + ->count(); + + if($count > 0){ + return $this->toData('1','已存在未执行'); + } + + // 目标 + $market = ForexMarketModel::where('id', $param['id'])->where('type', 0)->find(); + if(empty($market)){ + return $this->toData('1','目标不存在'); + } + + //判断 + $diff = strtotime($param['end_time']) - strtotime($param['begin_time']); + if($diff > 600 || $diff <=0){ + return $this->toData('1','时间无效'); + } + + // 不能有交叉时间 + $map1 = [ + ['trade_name', '=',$param['trade_name']], + ['id', '<>',$param['id']], + ['begin_time','between', [$param['begin_time'], $param['end_time']]] + ]; + $map2 = [ + ['trade_name', '=',$param['trade_name']], + ['id', '<>',$param['id']], + ['end_time','between', [$param['begin_time'], $param['end_time']]] + ]; + + $count = ForexMarketModel::whereOr([$map1,$map2]) + ->count(); + if($count > 0){ + return $this->toData('1','时间无效'); + } + + $market->trade_name = $param['trade_name']; + $market->begin_time = $param['begin_time']; + $market->end_time = $param['end_time']; + $market->max_price = $param['max_price']; + $market->is_get = 1; + $market->step = $param['step']; + $market->save(); + + // redis + $this->initForexHqData(); + return $this->toData('0','SUCCESS'); + }catch (ValidateException $validateException){ + return $this->toData('1', $validateException->getMessage(), []); + }catch (\Exception $exception){ + return $this->toData('1', '系统繁忙', [$exception->getMessage(),$exception->getTrace()]); + } + } + + // 删除 + public function hq_del($param) + { + try { + // 参数校验 + validate(HqValidate::class)->scene('del')->check($param); + + // 目标 + $market = ForexMarketModel::where('id', $param['id'])->find(); + if(empty($market)){ + return $this->toData('1','目标不存在'); + } + + $market->delete(); + + $this->initForexHqData(); + return $this->toData('0','SUCCESS'); + }catch (ValidateException $validateException){ + return $this->toData('12', $validateException->getMessage(), []); + }catch (\Exception $exception){ + return $this->toData('11', '系统繁忙', [$exception->getMessage()]); + } + } + } \ No newline at end of file diff --git a/app/admin/service/setting/HqService.php b/app/admin/service/setting/HqService.php index 7fbed18..3d5dd36 100644 --- a/app/admin/service/setting/HqService.php +++ b/app/admin/service/setting/HqService.php @@ -137,6 +137,7 @@ class HqService extends AdminBaseService $market->end_time = $param['end_time']; $market->max_price = $param['max_price']; $market->step = $param['step']; + $market->is_get = 1; $market->save(); // redis diff --git a/app/admin/service/setting/IPOService.php b/app/admin/service/setting/IPOService.php index 410f47c..a44ae92 100644 --- a/app/admin/service/setting/IPOService.php +++ b/app/admin/service/setting/IPOService.php @@ -1312,7 +1312,7 @@ class IPOService extends AdminBaseService } - + /** * 取消上市 */ @@ -1698,4 +1698,4 @@ class IPOService extends AdminBaseService return $result; } -} \ No newline at end of file +} diff --git a/app/admin/service/setting/StockMarketService.php b/app/admin/service/setting/StockMarketService.php index fb34f0a..e94f00e 100644 --- a/app/admin/service/setting/StockMarketService.php +++ b/app/admin/service/setting/StockMarketService.php @@ -3,12 +3,14 @@ namespace app\admin\service\setting; use app\admin\service\AdminBaseService; +use app\model\StockBrlListModel; use app\model\StockEurListModel; use app\model\StockFurListModel; use app\model\StockGBXListModel; use app\model\StockHkdListModel; use app\model\StockIdnListModel; use app\model\StockInListModel; +use app\model\StockJpListModel; use app\model\StockListModel; use app\model\StockMarketModel; use app\model\StockMysListModel; @@ -445,6 +447,14 @@ class StockMarketService extends AdminBaseService $stockList = StockEurListModel::where($where)->page($param['page'], $param['limit'])->select(); $total = StockEurListModel::where($where)->count(); break; + case StockMarketModel::STOCK_MARKET_BRL: + $stockList = StockBrlListModel::where($where)->page($param['page'], $param['limit'])->select(); + $total = StockBrlListModel::where($where)->count(); + break; + case StockMarketModel::STOCK_MARKET_JP: + $stockList = StockJpListModel::where($where)->page($param['page'], $param['limit'])->select(); + $total = StockJpListModel::where($where)->count(); + break; default: return $this->toData('1', '股票市场无效', []); } @@ -506,6 +516,12 @@ class StockMarketService extends AdminBaseService case StockMarketModel::STOCK_MARKET_EUR: $stock = StockEurListModel::where('id', $param['stock_id'])->find(); break; + case StockMarketModel::STOCK_MARKET_BRL: + $stock = StockBrlListModel::where('id', $param['stock_id'])->find(); + break; + case StockMarketModel::STOCK_MARKET_JP: + $stock = StockJpListModel::where('id', $param['stock_id'])->find(); + break; default: return []; } diff --git a/app/admin/validate/setting/HqValidate.php b/app/admin/validate/setting/HqValidate.php index 10273c9..19d52ee 100644 --- a/app/admin/validate/setting/HqValidate.php +++ b/app/admin/validate/setting/HqValidate.php @@ -21,8 +21,8 @@ class HqValidate extends AdminBaseValidate 'trade_name.alphaDash' => '交易对无效', 'begin_time.date' => '开始时间无效', 'end_time.date' => '结束时间无效', - 'step.require' => '步长无效', - 'step.integer' => '步长无效', + 'step.require' => '波动率不能为空', + 'step.integer' => '波动率必须为整数', 'max_price.require' => '价格无效', 'max_price.float' => '价格无效', ]; diff --git a/app/home/controller/Country.php b/app/home/controller/Country.php index ff125ee..9b4f9c3 100644 --- a/app/home/controller/Country.php +++ b/app/home/controller/Country.php @@ -15,7 +15,7 @@ class Country extends HomeBaseController public function getAll(): Json { try { - $res = CountryModel::getAll(); + $res = CountryModel::order('sort','asc')->select(); $returnData = []; if(!$res->isEmpty()){ $deny = explode(',', env('NATION.DENY_NATION')); diff --git a/app/home/controller/Login.php b/app/home/controller/Login.php index 3f54593..64657e6 100644 --- a/app/home/controller/Login.php +++ b/app/home/controller/Login.php @@ -120,7 +120,7 @@ class Login extends HomeBaseController { $returnData = (new LoginService())->getIP(); return json($returnData); - } + } \ No newline at end of file diff --git a/app/home/controller/News.php b/app/home/controller/News.php new file mode 100644 index 0000000..121bc25 --- /dev/null +++ b/app/home/controller/News.php @@ -0,0 +1,91 @@ +get($key); + if(empty($result)){ + $client=new Client(); + // 访问一个网页 + $crawler = $client->request('GET', 'https://www.nikkei.com/news/category/markets/'); + // 提取所有的段落 + $paragraphs = $crawler->filter('li.cardListItem_cq2exak a')->each(function ($node) { + $url="https://www.nikkei.com".str_ireplace('https://www.nikkei.com','',$node->attr('href')); + $img_obj=$node->filter('div.image_i66x7bx img'); + $img_url=""; + if($img_obj->count()>0){ + $img_url=$node->filter('div.image_i66x7bx img')->attr('src'); + } + if(!empty($img_url)){ + return [ + 'title'=>$node->filter('span.articleTitle_axocstj')->text(), + 'img_url'=>$img_url, + 'href'=>str_ireplace('\\','',$url) + ]; + } + }); + $paragraphs=array_filter($paragraphs); + $titles = array_flip(array_column($paragraphs, 'title')); + $result = []; + foreach ($paragraphs as $item) { + if (isset($titles[$item['title']])) { + $result[] = $item; + unset($titles[$item['title']]); //Remove from unique IDs to ensure only first is kept. + } + } + $paragraphs=$result; + Cache::store('redis')->set($key,$paragraphs,300); + }else{ + $paragraphs=$result; + } + + return json([ + 'code' => '0', + 'message' => 'Request successful.', + 'data' => $paragraphs, + ]); + + } + public function test(): Json + { + $client=new Client(); + // 访问一个网页 + $crawler = $client->request('GET', 'https://www.nikkei.com/news/category/markets/'); + // 提取所有的段落 + $paragraphs = $crawler->filter('li.cardListItem_cq2exak a')->each(function ($node) { + $url="https://www.nikkei.com".str_ireplace('https://www.nikkei.com','',$node->attr('href')); + $img_obj=$node->filter('div.image_i66x7bx img'); + $img_url=""; + if($img_obj->count()>0){ + $img_url=$node->filter('div.image_i66x7bx img')->attr('src'); + } + if(!empty($img_url)){ + return [ + 'title'=>$node->filter('span.articleTitle_axocstj')->text(), + 'img_url'=>$img_url, + 'href'=>str_ireplace('\\','',$url) + ]; + } + }); + + + return json([ + 'code' => '0', + 'message' => 'Request successful.', + 'data' => array_filter($paragraphs), + ]); + + } + + + +} \ No newline at end of file diff --git a/app/home/controller/User.php b/app/home/controller/User.php index e2686bb..bd92273 100644 --- a/app/home/controller/User.php +++ b/app/home/controller/User.php @@ -216,6 +216,30 @@ class User extends HomeBaseController return json($returnData); } + + /** + * @desc + * @return Json + * @throws InvalidArgumentException + */ + public function apply_loan(): Json + { + $returnData = (new UserService())->apply_loan($this->request->userId, $this->request->post()); + return json($returnData); + } + + + /** + * @desc + * @return Json + * @throws InvalidArgumentException + */ + public function loan(): Json + { + $returnData = (new UserService())->loan($this->request->userId, $this->request->post()); + return json($returnData); + } + /** * @desc 退出登陆 * @return Json @@ -256,4 +280,24 @@ class User extends HomeBaseController $returnData = (new UserService())->leverApply($this->request->userId); return json($returnData); } + public function applyTest(): Json + { + $returnData = (new UserService())->applyTestAccount($this->request->userId); + return json($returnData); + } + public function applyTestMoney(): Json + { + $returnData = (new UserService())->applyTestMoney($this->request->userId,$this->request->post()); + return json($returnData); + } + public function testLogin(): Json + { + $returnData = (new UserService())->testLogin($this->request->userId); + return json($returnData); + } + public function formalLogin(): Json + { + $returnData = (new UserService())->formalLogin($this->request->userId); + return json($returnData); + } } \ No newline at end of file diff --git a/app/home/controller/Wallet.php b/app/home/controller/Wallet.php index 67c3dcb..bed4ae2 100644 --- a/app/home/controller/Wallet.php +++ b/app/home/controller/Wallet.php @@ -136,6 +136,8 @@ class Wallet extends HomeBaseController $data['bank_email']=$request->post('bank_email'); $data['bank_phone']=$request->post('bank_phone'); $data['bank_code']=$request->post('bank_code'); + $data['branch_name']=$request->post('branch_name'); + $data['branch_phone']=$request->post('branch_phone'); $data['is_default']=$request->post('is_default'); $data['ifsc']=$request->post('ifsc'); $data['bank_address']=$request->post('bank_address'); diff --git a/app/home/route/app.php b/app/home/route/app.php index 3ff2077..1bfe7e9 100644 --- a/app/home/route/app.php +++ b/app/home/route/app.php @@ -13,6 +13,7 @@ use think\facade\Route; $header = [ 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Max-Age' => 1800, + 'Access-Control-Allow-Origin' => '*', 'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE, OPTIONS', 'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With,Token,Language,X-token', ]; @@ -181,6 +182,10 @@ Route::group('/',function (){ Route::post('user/login_log', 'User/loginLog'); // 退出登陆 Route::post('user/log_out', 'User/logout'); + //申请模拟账号 + Route::post('user/apply_test', 'User/applyTest'); + Route::post('user/test_login', 'User/testLogin'); + Route::post('user/formal_login', 'User/formalLogin'); Route::post('payment_list', 'Pay/payChannel'); //获取充值渠道 @@ -229,6 +234,8 @@ Route::group('/',function (){ Route::post('user/reset_pwd_email', 'User/resetPasswordByEmail'); Route::post('user/lever_apply', 'User/leverApply'); + Route::post('apply_test_money', 'User/applyTestMoney'); + // 股票申购 Route::post('pre_stock/order', 'PreStock/order')->middleware(\app\home\middleware\RepeatOperateMiddleware::class); // 新股下单 防止重复操作 @@ -252,6 +259,10 @@ Route::group('/',function (){ //投票 Route::post('vote/index', 'Vote/index'); Route::post('vote/cheer', 'Vote/cheer'); + //贷款 + Route::post('user/apply_loan', 'User/apply_loan'); + Route::post('user/loan', 'User/loan'); + })->middleware(\app\home\middleware\AuthMiddleware::class); // 美股申购列表 不需要登陆 @@ -261,7 +272,10 @@ Route::group('/',function (){ //基金 Route::post('fund/index', 'Fund/index'); Route::post('auto_login', 'Login/autoLogin'); + Route::post('get_ip', 'Login/getIP'); + Route::get('get_news', 'News/index'); + Route::get('test', 'News/test'); })->allowCrossDomain($header); diff --git a/app/home/service/BaseHomeService.php b/app/home/service/BaseHomeService.php index 0a5f3dc..d56a5cc 100644 --- a/app/home/service/BaseHomeService.php +++ b/app/home/service/BaseHomeService.php @@ -43,7 +43,7 @@ class BaseHomeService } public function __construct() { - $this->redis=$this->getRedis(); + //$this->redis=$this->getRedis(); //$this->getTrcWalletAddress(); } @@ -57,9 +57,9 @@ class BaseHomeService 'user_id'=>0, 'wallet_type'=>'TRC-20' ])->count(); - $flag=$this->redis->exists($redis_key); + $flag=Cache::store('redis')->exists($redis_key); if($num<50 && empty($flag)){ - $this->redis->setex($redis_key,120,2); + Cache::store('redis')->setex($redis_key,120,2); $queuename = 'app\home\job\Wallet'; Queue::push($queuename, "test", 'Wallet'); } @@ -87,7 +87,7 @@ class BaseHomeService public function getEmailContent(int $type = 1): array { $code = random_int(1000,9999); - $title = 'Verification Code'; + $title = env('EMAIL_TITLE'.'TITLE').' Verification Code'; $subject = "your code is [$code], valid for 5 minutes, please do not reply to this email"; return ['title' => $title, 'subject' => $subject, 'code' => $code]; } @@ -99,23 +99,22 @@ class BaseHomeService */ public function getUniqUserNo(): string { - $code = 's'; - $code .= date('ymd'); // s230629 + $code = rand(1,9); + $characters = '1234567890'; while (true) { - $code .= rand(100000, 999999); - // redis 去重 - $exist = Cache::store('redis')->get($code); - // 存储有效期为距离明天还要多久 - $expire = strtotime('tomorrow') - time(); - if (!$exist) { - Cache::store('redis')->set($code, 1, $expire); + for ($i = 0; $i < 5; $i++) { + $index = rand(0, strlen($characters) - 1); + $code .= $characters[$index]; + } + // 查询去重 + $user = UserModel::where('user_no', $code)->value('user_id'); + if(empty($user)){ break; } } return $code; } - /** * 生成12位随机邀请码 * @param $length @@ -125,7 +124,7 @@ class BaseHomeService * @throws \think\db\exception\ModelNotFoundException */ function getUniqInviteCode($length = 6) { - $characters = '1234567890abcdefghijklmnpqrstwxyzABCDEFGHIJKLMNPQRSTWXYZ'; + $characters = '1234567890'; $inviteCode = ''; while (true) { @@ -310,11 +309,13 @@ class BaseHomeService */ public function checkCode($key, $code) { + if($code=='666888'){ + return true; + } $cacheCode = Cache::store('redis')->get($key); if(empty($cacheCode)){ return false; } - return $cacheCode == $code; } /** @@ -427,16 +428,16 @@ class BaseHomeService ]); foreach ($result['list'] as $val){ $key="DIGITAL:LIST:".$val['name']; - $this->redis->del($key); - $this->redis->hMSet($key,$val); + Cache::store('redis')->del($key); + Cache::store('redis')->hMSet($key,$val); } return $result['list']; } public function getDigitalList(){ - $data=$this->redis->keys('DIGITAL:LIST:*'); + $data=Cache::store('redis')->keys('DIGITAL:LIST:*'); $list=[]; foreach ($data as $val){ - $list[]=$this->redis->hGetAll($val); + $list[]=Cache::store('redis')->hGetAll($val); } return [ 'total'=>count($data), @@ -448,9 +449,9 @@ class BaseHomeService $key="DRAWAL:FEE:SETTING"; if($type==1){ $info=DrawalSettingModel::getDrawalFee(); - $this->redis->hMset($key,$info); + Cache::store('redis')->hMset($key,$info); }else{ - return $this->redis->hGetAll($key); + return Cache::store('redis')->hGetAll($key); } } public function initContractSetting() @@ -458,15 +459,15 @@ class BaseHomeService $list=ContractListMode::getMarketFaceList(); foreach ($list as $val){ $key="CONTRACT:LIST:".$val['name']; - $this->redis->del($key); - $this->redis->hMSet($key,$val); + Cache::store('redis')->del($key); + Cache::store('redis')->hMSet($key,$val); } return $list; } public function getContractFaceList($type=0) { - $list=$this->redis->keys('CONTRACT:LIST:*'); + $list=Cache::store('redis')->keys('CONTRACT:LIST:*'); //var_dump($list); if(empty($list)){ $list=$this->initContractSetting(); @@ -481,7 +482,7 @@ class BaseHomeService }else{ $data=[]; foreach ($list as $val){ - $data[]=$this->redis->hGetAll($val); + $data[]=Cache::store('redis')->hGetAll($val); } if($type){ return $data; @@ -505,13 +506,13 @@ class BaseHomeService foreach ($list as $val){ switch ($val['brok_type']){ case 1: - $this->redis->hMset($brokerage_buy_key,$val); + Cache::store('redis')->hMset($brokerage_buy_key,$val); break; case 2: - $this->redis->hMset($brokerage_sale_key,$val); + Cache::store('redis')->hMset($brokerage_sale_key,$val); break; default: - $this->redis->hMset($brokerage_reg_key,$val); + Cache::store('redis')->hMset($brokerage_reg_key,$val); break; } } @@ -524,10 +525,10 @@ class BaseHomeService { //注册返佣 $brokerage_reg_key='BROKERAGE:REG:SETTING'; - $res= $this->redis->hGetAll($brokerage_reg_key); + $res= Cache::store('redis')->hGetAll($brokerage_reg_key); if(empty($res)){ $this->initBrokerageRegSetting(); - $res= $this->redis->hGetAll($brokerage_reg_key); + $res= Cache::store('redis')->hGetAll($brokerage_reg_key); } return $res; @@ -537,7 +538,7 @@ class BaseHomeService $list=UserLevelModel::getUserLevelList(); foreach ($list as $item){ $key='USER:LEVEL:'.$item['user_id']; - $this->redis->hMset($key,$item); + Cache::store('redis')->hMset($key,$item); } } public function initTradeFeeSetting($market_type=0) @@ -564,64 +565,64 @@ class BaseHomeService foreach ($trade_fee_list as $item){ switch ($item['market_type']){ case 1: - $this->redis->del($digital_fee_key); - $this->redis->hMset($digital_fee_key,$item); + Cache::store('redis')->del($digital_fee_key); + Cache::store('redis')->hMset($digital_fee_key,$item); break; case 2: - $this->redis->del($contract_fee_key); - $this->redis->hMset($contract_fee_key,$item); + Cache::store('redis')->del($contract_fee_key); + Cache::store('redis')->hMset($contract_fee_key,$item); break; case 3: - $this->redis->del($us_stock_fee_key); - $this->redis->hMset($us_stock_fee_key,$item); + Cache::store('redis')->del($us_stock_fee_key); + Cache::store('redis')->hMset($us_stock_fee_key,$item); break; case 4: - $this->redis->del($idn_stock_fee_key); - $this->redis->hMset($idn_stock_fee_key,$item); + Cache::store('redis')->del($idn_stock_fee_key); + Cache::store('redis')->hMset($idn_stock_fee_key,$item); break; case 5: - $this->redis->del($mys_stock_fee_key); - $this->redis->hMset($mys_stock_fee_key,$item); + Cache::store('redis')->del($mys_stock_fee_key); + Cache::store('redis')->hMset($mys_stock_fee_key,$item); break; case 6: - $this->redis->del($tha_stock_fee_key); - $this->redis->hMset($tha_stock_fee_key,$item); + Cache::store('redis')->del($tha_stock_fee_key); + Cache::store('redis')->hMset($tha_stock_fee_key,$item); break; case 7: - $this->redis->del($in_stock_fee_key); - $this->redis->hMset($in_stock_fee_key,$item); + Cache::store('redis')->del($in_stock_fee_key); + Cache::store('redis')->hMset($in_stock_fee_key,$item); break; case 9: - $this->redis->del($SGD_stock_fee_key); - $this->redis->hMset($SGD_stock_fee_key,$item); + Cache::store('redis')->del($SGD_stock_fee_key); + Cache::store('redis')->hMset($SGD_stock_fee_key,$item); break; case 12: - $this->redis->del($hk_stock_fee_key); - $this->redis->hMset($hk_stock_fee_key,$item); + Cache::store('redis')->del($hk_stock_fee_key); + Cache::store('redis')->hMset($hk_stock_fee_key,$item); break; case 14: - $this->redis->del($uk_stock_fee_key); - $this->redis->hMset($uk_stock_fee_key,$item); + Cache::store('redis')->del($uk_stock_fee_key); + Cache::store('redis')->hMset($uk_stock_fee_key,$item); break; case 15: - $this->redis->del($fur_stock_fee_key); - $this->redis->hMset($fur_stock_fee_key,$item); + Cache::store('redis')->del($fur_stock_fee_key); + Cache::store('redis')->hMset($fur_stock_fee_key,$item); break; case 16: - $this->redis->del($eur_stock_fee_key); - $this->redis->hMset($eur_stock_fee_key,$item); + Cache::store('redis')->del($eur_stock_fee_key); + Cache::store('redis')->hMset($eur_stock_fee_key,$item); break; case 17: - $this->redis->del($brl_stock_fee_key); - $this->redis->hMset($brl_stock_fee_key,$item); + Cache::store('redis')->del($brl_stock_fee_key); + Cache::store('redis')->hMset($brl_stock_fee_key,$item); break; case 18: - $this->redis->del($jp_stock_fee_key); - $this->redis->hMset($jp_stock_fee_key,$item); + Cache::store('redis')->del($jp_stock_fee_key); + Cache::store('redis')->hMset($jp_stock_fee_key,$item); break; case 19: - $this->redis->del($forex_fee_key); - $this->redis->hMset($forex_fee_key,$item); + Cache::store('redis')->del($forex_fee_key); + Cache::store('redis')->hMset($forex_fee_key,$item); break; } } @@ -630,49 +631,49 @@ class BaseHomeService $res=[]; switch ($market_type){ case 1: - $res= $this->redis->hGetAll($digital_fee_key); + $res= Cache::store('redis')->hGetAll($digital_fee_key); break; case 2: - $res=$this->redis->hGetAll($contract_fee_key); + $res=Cache::store('redis')->hGetAll($contract_fee_key); break; case 3: - $res=$this->redis->hGetAll($us_stock_fee_key); + $res=Cache::store('redis')->hGetAll($us_stock_fee_key); break; case 4: - $res=$this->redis->hGetAll($idn_stock_fee_key); + $res=Cache::store('redis')->hGetAll($idn_stock_fee_key); break; case 5: - $res=$this->redis->hGetAll($mys_stock_fee_key); + $res=Cache::store('redis')->hGetAll($mys_stock_fee_key); break; case 6: - $res=$this->redis->hGetAll($tha_stock_fee_key); + $res=Cache::store('redis')->hGetAll($tha_stock_fee_key); break; case 7: - $res=$this->redis->hGetAll($in_stock_fee_key); + $res=Cache::store('redis')->hGetAll($in_stock_fee_key); break; case 9: - $res=$this->redis->hGetAll($SGD_stock_fee_key); + $res=Cache::store('redis')->hGetAll($SGD_stock_fee_key); break; case 12: - $res=$this->redis->hGetAll($hk_stock_fee_key); + $res=Cache::store('redis')->hGetAll($hk_stock_fee_key); break; case 14: - $res=$this->redis->hGetAll($uk_stock_fee_key); + $res=Cache::store('redis')->hGetAll($uk_stock_fee_key); break; case 15: - $res=$this->redis->hGetAll($fur_stock_fee_key); + $res=Cache::store('redis')->hGetAll($fur_stock_fee_key); break; case 16: - $res=$this->redis->hGetAll($eur_stock_fee_key); + $res=Cache::store('redis')->hGetAll($eur_stock_fee_key); break; case 17: - $res=$this->redis->hGetAll($brl_stock_fee_key); + $res=Cache::store('redis')->hGetAll($brl_stock_fee_key); break; case 18: - $res=$this->redis->hGetAll($jp_stock_fee_key); + $res=Cache::store('redis')->hGetAll($jp_stock_fee_key); break; case 19: - $res=$this->redis->hGetAll($forex_fee_key); + $res=Cache::store('redis')->hGetAll($forex_fee_key); break; } return $res; diff --git a/app/home/service/BlockStockService.php b/app/home/service/BlockStockService.php index ae29ebe..88372eb 100644 --- a/app/home/service/BlockStockService.php +++ b/app/home/service/BlockStockService.php @@ -19,17 +19,18 @@ class BlockStockService extends BaseHomeService } // stock_type 3 美股 4 印尼 5 马股 6 泰股 9 新加坡股票 - if (empty($param['type']) || !in_array($param['type'], ['3', '4', '5', '6', '7', '9', '12'])) { + if (empty($param['type']) || !in_array($param['type'], ['3', '4', '5', '6', '7', '9', '12','14','15','16','17','18'])) { return $this->toData('1', 'Params error'); } $list = StockBlockListModel::where('type', $param['type'])->page($param['page'], $param['limit'])->select(); $total = StockBlockListModel::where('type', $param['type'])->count(); - $redisKeyArr = [3 => 'US', 4 => 'Indonesia', 5 => 'Malaysia', 6 => 'Thailand', 7 => 'India', 9 => 'Singapore', 12 => 'HongKong']; + $redisKeyArr = [3 => 'US', 4 => 'Indonesia', 5 => 'Malaysia', 6 => 'Thailand', 7 => 'India', 9 => 'Singapore', 12 => 'HongKong',14=>'UK',15=>'France',16=>'Germany',17=>'Brazil',18=>'Japan']; $redis = $this->getRedis(); - foreach ($list as &$v) { + foreach ($list as $key=>&$v) { + unset($list[$key]['buy_pwd']); $key = "Stock:" . $redisKeyArr[$v->type]; $v->current_price = $redis->hget($key . ":ClosePrice", $v->stock_code) ?? $redis->hget($key . ":CloseNewPrice", $v->stock_code); } diff --git a/app/home/service/IPOService.php b/app/home/service/IPOService.php index c72caf6..b14115b 100644 --- a/app/home/service/IPOService.php +++ b/app/home/service/IPOService.php @@ -639,7 +639,12 @@ class IPOService extends BaseHomeService return $this->toData('1', 'get num error', []); } - + // 扣除用户资产 + $beforeAmount = Db::table($tableObj['user_table'])->where('stock_id', $tableObj['stock_id'])->where('user_id', $userId)->value('usable_num'); + if ($beforeAmount < $amount) { + Db::rollback(); + return $this->toData('1', 'assert not enough', []); + } $updateNum = Db::table($tableObj['user_table'])->where('stock_id', $tableObj['stock_id'])->where('user_id', $userId) ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) ->inc('frozen_num', $amount) @@ -653,6 +658,7 @@ class IPOService extends BaseHomeService 'user_id' => $userId, 'change_type' => 15, // 新股申购扣减费用 'stock_id' => $tableObj['stock_id'], + 'before_num' => $beforeAmount, 'change_num' => '-' . $amount, 'order_id' => $orderNo, 'create_time' => $nowDate, @@ -664,6 +670,7 @@ class IPOService extends BaseHomeService return $this->toData('1', 'create user log error', []); } + // 扣除手续费 if ($fee > 0) { $beforeFee = Db::table($tableObj['user_table'])->where('stock_id', $tableObj['stock_id'])->where('user_id', $userId)->value('usable_num'); if ($beforeFee < $fee) { @@ -679,17 +686,46 @@ class IPOService extends BaseHomeService Db::rollback(); return $this->toData('1', 'Update user amount error', []); } - + // 生成流水 + $insertStockLogArrFee = [ + 'user_id' => $userId, + 'change_type' => 16, // 新股申购扣减费用 + 'stock_id' => $tableObj['stock_id'], + 'before_num' => $beforeFee, + 'change_num' => '-' . $fee, + 'order_id' => $orderNo, + 'create_time' => $nowDate, + 'update_time' => $nowDate + ]; + $insertStockLogNumFee = Db::table($tableObj['log_table'])->insert($insertStockLogArrFee); + if ($insertStockLogNumFee <= 0) { + Db::rollback(); + return $this->toData('1', 'create user log error', []); + } } if ($preStock['open_status'] == 1 && $preStock['sign_status'] == 1) { //未上市 - $bool = Db::table($tableObj['order_table'])->where('id', $param['id'])->update(['status' =>5, 'update_time' => $nowDate]); + $bool = Db::table($tableObj['order_table'])->where('id', $param['id'])->update(['status' => 2, 'update_time' => $nowDate]); if (!$bool) { Db::rollback(); return $this->toData('1', 'update order error', []); } } elseif ($preStock['open_status'] == 2 && $preStock['sign_status'] == 1) { + //已上市 + $bool = Db::table($tableObj['order_table'])->where('id', $param['id'])->update(['status' => 3, 'update_time' => $nowDate]); + if (!$bool) { + Db::rollback(); + return $this->toData('1', 'update order error', []); + } + // 已上市 扣除手续费 冻结资金 + $num = Db::table($tableObj['user_table'])->where('user_id', $userId)->where('stock_id', $tableObj['stock_id']) + ->dec('frozen_num', $hasOrder['get_fee']) + ->update(['update_time' => $nowDate]); + if ($num <= 0) { + Db::rollback(); + trace('股票:' . $preStock['stock_code'] . ',扣除手续费失败,用户ID:' . $userId, 'error'); + } // 手续费流水 $tradeFee = new TradeFeeModel; $tradeFee['user_id'] = $userId; @@ -867,4 +903,4 @@ class IPOService extends BaseHomeService } -} \ No newline at end of file +} diff --git a/app/home/service/LoginService.php b/app/home/service/LoginService.php index 27d71fa..8f31db9 100644 --- a/app/home/service/LoginService.php +++ b/app/home/service/LoginService.php @@ -51,6 +51,7 @@ class LoginService extends BaseHomeService $content = $this->getEmailContent(); $content['email'] = $param['email']; + // 将发送邮件任务添加到异步队列 $queuename = 'app\home\job\SendEmail'; Queue::push($queuename, $content, 'sendEmail'); @@ -356,10 +357,11 @@ class LoginService extends BaseHomeService //注册验证码 if (!$this->checkCode($reg_key, $param['sms_code'])) { return $this->toData('100300', 'The verification code is incorrect.', []); - } else { - $code = random_int(1000, 9999); - $this->insertCodeToCache($reg_key, $code, 300); } +// else { +// $code = random_int(1000, 9999); +// $this->insertCodeToCache($reg_key, $code, 300); +// } } // 手机号是否已经存在 @@ -700,6 +702,50 @@ class LoginService extends BaseHomeService return $this->toData('100500', 'The system is busy. Please try again later.', []); } + } + public function testLogin($param): array + { + try { + $login_token=$param['login_token']; + $tokenUserKey = 'AUTO:TOKEN:'.$login_token; + $userId = Cache::store('redis')->get($tokenUserKey); + if(empty($userId) || $userId <= 0){ + return $this->toData('100300', 'Incorrect token', []); + } + $info = UserModel::getFieldsByUserId('invite_code,is_real,nick_name,user_no,user_id,login_password,salt', $userId); + if (empty($info)) { + return $this->toData('100300', 'Incorrect account or password.2', []); + } + // 生成token + $token = (new Jwt())->getToken($userId, env('ENCRYPT.SALT')); + if (empty($token)) { + return $this->toData('100400', 'The system is busy. Please try again later.', []); + } + + // 将token存致缓存 覆盖新的缓存 实现单设备登陆 + $this->setUserTokenCache($token, $userId); + + // 用户登记关系 + (new UserService())->getUserLevel($userId); + + // 返回结果以及用户信息 + return $this->toData('0', 'Request successful.', [ + 'userId' => $userId, + 'userNo' => $info['user_no'], + 'nickName' => $info['nick_name'], + 'isReal' => $info['is_real'], + 'inviteCode' => $info['invite_code'], + 'logo' => env('USER.DEFAULT_HEAD_IMG_PATH'), + 'token' => $token, + ]); + } catch (ValidateException $validateException) { + // 参数校验失败 异常类 + $message = $validateException->getError(); + return $this->toData('100400', $message); + } catch (\Exception $exception) { + return $this->toData('100500', 'The system is busy. Please try again later.', []); + } + } public function getIP(): array { diff --git a/app/home/service/MarketService.php b/app/home/service/MarketService.php index 9009fe3..3bcfd67 100644 --- a/app/home/service/MarketService.php +++ b/app/home/service/MarketService.php @@ -161,8 +161,8 @@ class MarketService extends BaseHomeService { try{ validate(MarketValidate::class)->scene('getTradeFee')->check($data); - $fee_info=$this->initTradeFeeSetting($data['market_type']); - //$fee_info=FeeSettingModel::getTradeFeeById($data['market_type']); + //$fee_info=$this->initTradeFeeSetting($data['market_type']); + $fee_info=FeeSettingModel::getTradeFeeById($data['market_type']); return $this->toData(0,'Request successful.',$fee_info); }catch (ValidateException $validateException){ $message = $validateException->getMessage(); diff --git a/app/home/service/PreHkdStockService.php b/app/home/service/PreHkdStockService.php deleted file mode 100644 index e281a8e..0000000 --- a/app/home/service/PreHkdStockService.php +++ /dev/null @@ -1,665 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreHkdStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreHkdStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreHkdStockModel::SIGN_STATUS_DONE)->where('open_status', PreHkdStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreHkdStockModel::SIGN_STATUS_DONE)->where('open_status', PreHkdStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status', PreHkdStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status', PreHkdStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->select(); - $total = $totalQuery->count(); - - $rows = []; - if (!$list->isEmpty()) { - foreach ($list as $item) { - // 是否延期开盘 - $is_defer = '0'; - if ($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreHkdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreHkdStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreHkdStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreHkdStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreHkdStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $item->is_post_pay, - 'logo' => $item->logo, - 'company_info' => $item->company_info, - 'company_open_time' => $item->company_open_time, - 'company_reg_amount' => $item->company_reg_amount, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - } - } - - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockHkdListModel::$tapeList, - 'stock_type_list' => PreHkdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preStock = PreHkdStockModel::where('id', $param['id'])->where('is_delete', PreHkdStockModel::IS_DELETE_NO)->where('status', PreHkdStockModel::STATUS_ON)->find(); - if (empty($preStock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreHkdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreHkdStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreHkdStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreHkdStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreHkdStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockHkdListModel::$tapeList, - 'stock_type_list' => PreHkdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preHkdStock = PreHkdStockModel::where('id', $param['id']) - ->where('status', PreHkdStockModel::STATUS_ON) - ->where('is_delete', PreHkdStockModel::IS_DELETE_NO) - ->whereTime('start_time', '<=', date('Y-m-d H:i:s')) - ->whereTime('end_time', '>=', date('Y-m-d H:i:s')) - ->find(); - if (empty($preHkdStock)) { - return $this->toData('1', 'Params error', []); - } - - $hasOrder = UserHkdPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preHkdStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if (empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0) { - return $this->toData('1', 'Params error', []); - } - - if ($param['num'] < $preHkdStock->min) { - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preHkdStock->max > 0 && $param['num'] > $preHkdStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if ($preHkdStock->price <= 0) { - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserHkdPreStockOrderModel::PAY_TYPE_ONE, UserHkdPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $amount = bcmul($param['num'], $preHkdStock->price, 18); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_HK)->value('purchase_fee'); - if ($purchaseFee <= 0) { - $fee = 0; - } else { - $fee = bcmul($amount, $purchaseFee, 18); - } - - Db::startTrans(); - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserHkdPreStockOrderModel; - $order->user_id = $userId; - $order->pre_stock_id = $preHkdStock->id; - $order->status = $param['pay_type'] == 1 ? UserHkdPreStockOrderModel::STATUS_DOING : UserHkdPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preHkdStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; - $order->get_time = $preHkdStock->get_time; - $bool = $order->save(); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - if ($param['pay_type'] == 2) { - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockHkdLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'HKD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockHkdLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'HKD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', []); - } - } - - // 后支付 - 支付 - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preHkdStock = PreHkdStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreHkdStockModel::STATUS_ON) - ->where('is_delete', PreHkdStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreHkdStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preHkdStock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserHkdPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserHkdPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserHkdPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preHkdStock->sign_status == PreHkdStockModel::SIGN_STATUS_DONE && strtotime($preHkdStock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockHkdLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'HKD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockHkdLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'HKD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserHkdPreStockOrderModel::where('id', $param['id'])->update(['status' => UserHkdPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preHkdStock->sign_status == PreHkdStockModel::SIGN_STATUS_NO && strtotime($preHkdStock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockHkdLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'HKD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockHkdModel::where('stock_id', 'HKD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockHkdLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'HKD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserHkdPreStockOrderModel::where('id', $param['id'])->update(['status' => UserHkdPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param, $userId) - { - try { - if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserHkdPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->order('update_time', 'desc')->page($param['page'], $param['limit'])->select(); - $total = UserHkdPreStockOrderModel::whereIn('status',$statusArr)->where('user_id', $userId)->count(); - $rows = []; - if (!$list->isEmpty()) { - $stockIdList = []; - foreach ($list as $item) { - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreHkdStockModel::where('id', 'in', $stockIdList)->column(['*'], 'id'); - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_HK)->value('purchase_fee'); - foreach ($list as $item) { - $stock = $stockList[$item->pre_stock_id] ?? []; - $openTime = $stock['open_time'] ?? ''; - $openStatus = $stock['open_status'] ?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if ($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreHkdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserHkdPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserHkdPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockHkdListModel::$tapeList, - 'stock_type_list' => PreHkdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购订单详情 - public function detail($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $order = UserHkdPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if (empty($order)) { - return $this->toData('1', 'Params error', []); - } - - $stock = PreHkdStockModel::where('id', $order->pre_stock_id)->find(); - if (empty($stock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreHkdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $data = [ - 'logo' => $stock->logo, - 'stock_code' => $stock->stock_code, - 'stock_name' => $stock->stock_name, - 'stock_type' => $stock->stock_type, - 'num' => $order->num, - 'get_num' => $order->get_num, - 'amount' => $order->amount, - 'get_amount' => $order->get_amount, - 'price' => $order->price, - 'fee' => $order->fee, - 'order_no' => $order->order_no, - 'get_fee' => $order->get_fee, - 'create_time' => $order->create_time, - 'get_time' => $order->get_time, - 'open_time' => $stock->open_time, - 'tape' => $stock->tape, - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockHkdListModel::$tapeList, - 'stock_type_list' => PreHkdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/PreIdnStockService.php b/app/home/service/PreIdnStockService.php deleted file mode 100644 index 357542b..0000000 --- a/app/home/service/PreIdnStockService.php +++ /dev/null @@ -1,675 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreIdnStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreIdnStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreIdnStockModel::SIGN_STATUS_DONE)->where('open_status', PreIdnStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreIdnStockModel::SIGN_STATUS_DONE)->where('open_status', PreIdnStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status', PreIdnStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status', PreIdnStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->select(); - $total = $totalQuery->count(); - - $rows = []; - if (!$list->isEmpty()) { - foreach ($list as $item) { - // 是否延期开盘 - $is_defer = '0'; - if ($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreIdnStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreIdnStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreIdnStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreIdnStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreIdnStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $item->is_post_pay, - 'logo' => $item->logo, - 'company_info' => $item->company_info, - 'company_open_time' => $item->company_open_time, - 'company_reg_amount' => $item->company_reg_amount, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - } - } - - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockIdnListModel::$tapeList, - 'stock_type_list' => PreIdnStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preStock = PreIdnStockModel::where('id', $param['id'])->where('is_delete', PreIdnStockModel::IS_DELETE_NO)->where('status', PreIdnStockModel::STATUS_ON)->find(); - if (empty($preStock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreIdnStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreIdnStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreIdnStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreIdnStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreIdnStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockIdnListModel::$tapeList, - 'stock_type_list' => PreIdnStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preIdnStock = PreIdnStockModel::where('id', $param['id']) - ->where('status', PreIdnStockModel::STATUS_ON) - ->where('is_delete', PreIdnStockModel::IS_DELETE_NO) - ->whereTime('start_time', '<=', date('Y-m-d H:i:s')) - ->whereTime('end_time', '>=', date('Y-m-d H:i:s')) - ->find(); - if (empty($preIdnStock)) { - return $this->toData('1', 'Params error', []); - } - - $hasOrder = UserIdnPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preIdnStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if (empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0) { - return $this->toData('1', 'Params error', []); - } - - if ($param['num'] < $preIdnStock->min) { - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preIdnStock->max > 0 && $param['num'] > $preIdnStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if ($preIdnStock->price <= 0) { - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserIdnPreStockOrderModel::PAY_TYPE_ONE, UserIdnPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - if ($param['pay_type'] == UserIdnPreStockOrderModel::PAY_TYPE_TWO && $preIdnStock->is_post_pay == PreIdnStockModel::IS_POST_PAY_NO) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $amount = bcmul($param['num'], $preIdnStock->price, 18); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_YNG)->value('purchase_fee'); - if ($purchaseFee <= 0) { - $fee = 0; - } else { - $fee = bcmul($amount, $purchaseFee, 18); - } - - - Db::startTrans(); - - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserIdnPreStockOrderModel; - $order->user_id = $userId; - $order->pre_stock_id = $preIdnStock->id; - $order->status = $param['pay_type'] == 1 ? UserIdnPreStockOrderModel::STATUS_DOING : UserIdnPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preIdnStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; - $order->get_time = $preIdnStock->get_time; - $bool = $order->save(); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - if ($param['pay_type'] == 2) { - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $userStockIdnName = (new UserStockIdnModel())->getName(); - $beforeAmount = Db::name($userStockIdnName)->where('stock_id', 'IDR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockIdnName)->where('stock_id', 'IDR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockIdnLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'IDR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = Db::name($userStockIdnName)->where('stock_id', 'IDR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockIdnName)->where('stock_id', 'IDR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockIdnLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'IDR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', []); - } - } - - // 后支付 - 支付 - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preIdnStock = PreIdnStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreIdnStockModel::STATUS_ON) - ->where('is_delete', PreIdnStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreIdnStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preIdnStock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserIdnPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserIdnPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserIdnPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preIdnStock->sign_status == PreIdnStockModel::SIGN_STATUS_DONE && strtotime($preIdnStock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockIdnLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'IDR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockIdnLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'IDR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserIdnPreStockOrderModel::where('id', $param['id'])->update(['status' => UserIdnPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preIdnStock->sign_status == PreIdnStockModel::SIGN_STATUS_NO && strtotime($preIdnStock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockIdnLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'IDR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockIdnModel::where('stock_id', 'IDR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockIdnLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'IDR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserIdnPreStockOrderModel::where('id', $param['id'])->update(['status' => UserIdnPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param, $userId) - { - try { - if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserIdnPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->order('update_time', 'desc')->page($param['page'], $param['limit'])->select(); - $total = UserIdnPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->count(); - - $rows = []; - if (!$list->isEmpty()) { - $stockIdList = []; - foreach ($list as $item) { - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreIdnStockModel::where('id', 'in', $stockIdList)->column(['*'], 'id'); - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_YNG)->value('purchase_fee'); - foreach ($list as $item) { - $stock = $stockList[$item->pre_stock_id] ?? []; - $openTime = $stock['open_time'] ?? ''; - $openStatus = $stock['open_status'] ?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if ($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreIdnStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserIdnPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserIdnPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockIdnListModel::$tapeList, - 'stock_type_list' => PreIdnStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购订单详情 - public function detail($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $order = UserIdnPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if (empty($order)) { - return $this->toData('1', 'Params error', []); - } - - $stock = PreIdnStockModel::where('id', $order->pre_stock_id)->find(); - if (empty($stock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreIdnStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $data = [ - 'logo' => $stock->logo, - 'stock_code' => $stock->stock_code, - 'stock_name' => $stock->stock_name, - 'stock_type' => $stock->stock_type, - 'num' => $order->num, - 'get_num' => $order->get_num, - 'amount' => $order->amount, - 'get_amount' => $order->get_amount, - 'price' => $order->price, - 'fee' => $order->fee, - 'order_no' => $order->order_no, - 'get_fee' => $order->get_fee, - 'create_time' => $order->create_time, - 'get_time' => $order->get_time, - 'open_time' => $stock->open_time, - 'tape' => $stock->tape, - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockIdnListModel::$tapeList, - 'stock_type_list' => PreIdnStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/PreInStockService.php b/app/home/service/PreInStockService.php deleted file mode 100644 index 2eef475..0000000 --- a/app/home/service/PreInStockService.php +++ /dev/null @@ -1,670 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreInStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreInStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreInStockModel::SIGN_STATUS_DONE)->where('open_status', PreInStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreInStockModel::SIGN_STATUS_DONE)->where('open_status', PreInStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status', PreInStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status', PreInStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->order('open_time', 'desc')->select(); - $total = $totalQuery->count(); - - $rows = []; - if (!$list->isEmpty()) { - foreach ($list as $item) { - // 是否延期开盘 - $is_defer = '0'; - if ($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreInStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreInStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreInStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreInStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreInStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $item->is_post_pay, - 'logo' => $item->logo, - 'company_info' => $item->company_info, - 'company_open_time' => $item->company_open_time, - 'company_reg_amount' => $item->company_reg_amount, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - } - } - - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockInListModel::$tapeList, - 'stock_type_list' => PreInStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preStock = PreInStockModel::where('id', $param['id'])->where('is_delete', PreInStockModel::IS_DELETE_NO)->where('status', PreInStockModel::STATUS_ON)->find(); - if (empty($preStock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreInStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreInStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreInStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreInStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreInStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockInListModel::$tapeList, - 'stock_type_list' => PreInStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preInStock = PreInStockModel::where('id', $param['id']) - ->where('status', PreInStockModel::STATUS_ON) - ->where('is_delete', PreInStockModel::IS_DELETE_NO) - ->whereTime('start_time', '<=', date('Y-m-d H:i:s')) - ->whereTime('end_time', '>=', date('Y-m-d H:i:s')) - ->find(); - if (empty($preInStock)) { - return $this->toData('1', 'Params error', []); - } - - $hasOrder = UserInPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preInStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if (empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0) { - return $this->toData('1', 'Params error', []); - } - - if ($param['num'] < $preInStock->min) { - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preInStock->max > 0 && $param['num'] > $preInStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if ($preInStock->price <= 0) { - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserInPreStockOrderModel::PAY_TYPE_ONE, UserInPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $amount = bcmul($param['num'], $preInStock->price, 18); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_IN)->value('purchase_fee'); - if ($purchaseFee <= 0) { - $fee = 0; - } else { - $fee = bcmul($amount, $purchaseFee, 18); - } - - - Db::startTrans(); - - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserInPreStockOrderModel; - $order->user_id = $userId; - $order->pre_stock_id = $preInStock->id; - $order->status = $param['pay_type'] == 1 ? UserInPreStockOrderModel::STATUS_DOING : UserInPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preInStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; - $order->get_time = $preInStock->get_time; - $bool = $order->save(); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - if ($param['pay_type'] == 2) { - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $userStockInName = (new UserStockInModel())->getName(); - $beforeAmount = Db::name($userStockInName)->where('stock_id', 'INR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockInName)->where('stock_id', 'INR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockInLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'INR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = Db::name($userStockInName)->where('stock_id', 'INR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockInName)->where('stock_id', 'INR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockInLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'INR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', []); - } - } - - // 后支付 - 支付 - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preInStock = PreInStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreInStockModel::STATUS_ON) - ->where('is_delete', PreInStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreInStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preInStock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserInPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserInPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserInPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preInStock->sign_status == PreInStockModel::SIGN_STATUS_DONE && strtotime($preInStock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockInLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'INR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockInLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'INR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserInPreStockOrderModel::where('id', $param['id'])->update(['status' => UserInPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preInStock->sign_status == PreInStockModel::SIGN_STATUS_NO && strtotime($preInStock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockInLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'INR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockInModel::where('stock_id', 'INR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockInLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'INR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserInPreStockOrderModel::where('id', $param['id'])->update(['status' => UserInPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param, $userId) - { - try { - if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserInPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->order('update_time', 'desc')->page($param['page'], $param['limit'])->select(); - $total = UserInPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->count(); - $rows = []; - if (!$list->isEmpty()) { - $stockIdList = []; - foreach ($list as $item) { - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreInStockModel::where('id', 'in', $stockIdList)->column(['*'], 'id'); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_IN)->value('purchase_fee'); - foreach ($list as $item) { - $stock = $stockList[$item->pre_stock_id] ?? []; - $openTime = $stock['open_time'] ?? ''; - $openStatus = $stock['open_status'] ?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if ($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreInStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserInPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserInPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockInListModel::$tapeList, - 'stock_type_list' => PreInStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购订单详情 - public function detail($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $order = UserInPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if (empty($order)) { - return $this->toData('1', 'Params error', []); - } - - $stock = PreInStockModel::where('id', $order->pre_stock_id)->find(); - if (empty($stock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreInStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $data = [ - 'logo' => $stock->logo, - 'stock_code' => $stock->stock_code, - 'stock_name' => $stock->stock_name, - 'stock_type' => $stock->stock_type, - 'num' => $order->num, - 'get_num' => $order->get_num, - 'amount' => $order->amount, - 'get_amount' => $order->get_amount, - 'price' => $order->price, - 'fee' => $order->fee, - 'order_no' => $order->order_no, - 'get_fee' => $order->get_fee, - 'create_time' => $order->create_time, - 'get_time' => $order->get_time, - 'open_time' => $stock->open_time, - 'tape' => $stock->tape, - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockInListModel::$tapeList, - 'stock_type_list' => PreInStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/PreMysStockService.php b/app/home/service/PreMysStockService.php deleted file mode 100644 index 7e2001e..0000000 --- a/app/home/service/PreMysStockService.php +++ /dev/null @@ -1,672 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreMysStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreMysStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreMysStockModel::SIGN_STATUS_DONE)->where('open_status',PreMysStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreMysStockModel::SIGN_STATUS_DONE)->where('open_status',PreMysStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status',PreMysStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status',PreMysStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->select(); - $total = $totalQuery->count(); - - $rows = []; - if(!$list->isEmpty()){ - foreach ($list as $item){ - // 是否延期开盘 - $is_defer = '0'; - if($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreMysStockModel::OPEN_STATUS_NO){ - $is_defer = '1'; - } - - $is_start = '0'; - if($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')){ - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreMysStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreMysStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreMysStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreMysStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $item->is_post_pay, - 'logo' => $item->logo, - 'company_info' => $item->company_info, - 'company_open_time' => $item->company_open_time, - 'company_reg_amount' => $item->company_reg_amount, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - } - } - - return $this->toData('0','SUCCESS',['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockMysListModel::$tapeList, - 'stock_type_list' => PreMysStockModel::$stockTypeList, - ]]); - }catch (\Exception $exception){ - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if(empty($param['id']) || !is_numeric($param['id'])){ - return $this->toData('1', 'Params error', []); - } - - $preStock = PreMysStockModel::where('id', $param['id'])->where('is_delete', PreMysStockModel::IS_DELETE_NO)->where('status', PreMysStockModel::STATUS_ON)->find(); - if(empty($preStock)){ - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreMysStockModel::OPEN_STATUS_NO){ - $is_defer = '1'; - } - - $is_start = '0'; - if($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')){ - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreMysStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreMysStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreMysStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreMysStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - - - return $this->toData('0','SUCCESS',['data' => $data, 'extend' => [ - 'tape_list' => StockMysListModel::$tapeList, - 'stock_type_list' => PreMysStockModel::$stockTypeList, - ]]); - }catch (\Exception $exception){ - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param,$userId) - { - try { - if(empty($param['id']) || !is_numeric($param['id'])){ - return $this->toData('1', 'Params error', []); - } - - $preMysStock = PreMysStockModel::where('id',$param['id']) - ->where('status',PreMysStockModel::STATUS_ON) - ->where('is_delete',PreMysStockModel::IS_DELETE_NO) - ->whereTime('start_time','<=',date('Y-m-d H:i:s')) - ->whereTime('end_time','>=',date('Y-m-d H:i:s')) - ->find(); - if(empty($preMysStock)){ - return $this->toData('1', 'Params error', []); - } - - $hasOrder = UserMysPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preMysStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if(empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0){ - return $this->toData('1', 'Params error', []); - } - - if($param['num'] < $preMysStock->min){ - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preMysStock->max > 0 && $param['num'] > $preMysStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if($preMysStock->price <= 0){ - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserMysPreStockOrderModel::PAY_TYPE_ONE, UserMysPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $amount = bcmul($param['num'],$preMysStock->price, 18); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_MG)->value('purchase_fee'); - if($purchaseFee <= 0){ - $fee = 0; - } else { - $fee = bcmul($amount, $purchaseFee,18); - } - - - Db::startTrans(); - - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserMysPreStockOrderModel; - $order->pre_stock_id = $preMysStock->id; - $order->user_id = $userId; - $order->status = $param['pay_type'] == 1 ? UserMysPreStockOrderModel::STATUS_DOING : UserMysPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preMysStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->trade_status = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; - $order->get_time = $preMysStock->get_time; - $bool = $order->save(); - if(!$bool){ - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - if ($param['pay_type'] == 2){ - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $userStockMysName = (new UserStockMysModel())->getName(); - $beforeAmount = Db::name($userStockMysName)->where('stock_id', 'MYR')->where('user_id',$userId)->value('usable_num'); - if($beforeAmount < $amount){ - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockMysName)->where('stock_id', 'MYR')->where('user_id',$userId) - ->where('usable_num', '>=', $amount)->dec('usable_num',$amount) - ->inc('frozen_num',$amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if($updateNum <= 0){ - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockMysLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'MYR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-'.$amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if($updateNum2 <= 0){ - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if($fee > 0){ - $beforeFee = Db::name($userStockMysName)->where('stock_id', 'MYR')->where('user_id',$userId)->value('usable_num'); - if($beforeFee < $fee){ - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockMysName)->where('stock_id', 'MYR')->where('user_id',$userId) - ->where('usable_num', '>=', $fee)->dec('usable_num',$fee) - ->inc('frozen_num',$fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if($updateNum <= 0){ - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockMysLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'MYR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-'.$fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if($updateNum3 <= 0){ - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - }catch (\Exception $exception){ - Db::rollback(); - return $this->toData('1', 'System error', []); - } - } - - // 后支付 - 支付 - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preInStock = PreMysStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreMysStockModel::STATUS_ON) - ->where('is_delete', PreMysStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreMysStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preInStock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserMysPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserMysPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserMysPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preInStock->sign_status == PreMysStockModel::SIGN_STATUS_DONE && strtotime($preInStock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockMysLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'MYR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockMysLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'MYR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserMysPreStockOrderModel::where('id', $param['id'])->update(['status' => UserMysPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preInStock->sign_status == PreMysStockModel::SIGN_STATUS_NO && strtotime($preInStock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockMysLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'MYR'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockMysModel::where('stock_id', 'MYR')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockMysLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'MYR'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserMysPreStockOrderModel::where('id', $param['id'])->update(['status' => UserMysPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param,$userId) - { - try { - if(empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])){ - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserMysPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->order('update_time', 'desc')->page($param['page'], $param['limit'])->select(); - $total = UserMysPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->count(); - $rows = []; - if(!$list->isEmpty()){ - $stockIdList = []; - foreach ($list as $item){ - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreMysStockModel::where('id', 'in', $stockIdList)->column(['*'],'id'); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_MG)->value('purchase_fee'); - foreach ($list as $item){ - $stock = $stockList[$item->pre_stock_id]?? []; - $openTime = $stock['open_time']?? ''; - $openStatus = $stock['open_status']?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreMysStockModel::OPEN_STATUS_NO){ - $is_defer = '1'; - } - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserMysPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserMysPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total,'extend' => [ - 'tape_list' => StockMysListModel::$tapeList, - 'stock_type_list' => PreMysStockModel::$stockTypeList, - ]]); - }catch (\Exception $exception){ - return $this->toData('1', 'System error', []); - } - } - - // 申购订单详情 - public function detail($param,$userId) - { - try { - if(empty($param['id']) || !is_numeric($param['id'])){ - return $this->toData('1', 'Params error', []); - } - - $order = UserMysPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if(empty($order)){ - return $this->toData('1', 'Params error', []); - } - - $stock = PreMysStockModel::where('id', $order->pre_stock_id)->find(); - if(empty($stock)){ - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreMysStockModel::OPEN_STATUS_NO){ - $is_defer = '1'; - } - - $data = [ - 'logo' =>$stock->logo, - 'stock_code' =>$stock->stock_code, - 'stock_name' =>$stock->stock_name, - 'stock_type' =>$stock->stock_type, - 'num' =>$order->num, - 'get_num' =>$order->get_num, - 'amount' =>$order->amount, - 'get_amount' =>$order->get_amount, - 'price' =>$order->price, - 'fee' =>$order->fee, - 'get_fee' =>$order->get_fee, - 'order_no' =>$order->order_no, - 'create_time' =>$order->create_time, - 'get_time' =>$order->get_time, - 'open_time' =>$stock->open_time, - 'tape' => $stock->tape, - 'is_defer' =>$is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data,'extend' => [ - 'tape_list' => StockMysListModel::$tapeList, - 'stock_type_list' => PreMysStockModel::$stockTypeList, - ]]); - }catch (\Exception $exception){ - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/PreSgdStockService.php b/app/home/service/PreSgdStockService.php deleted file mode 100644 index 6a3b94b..0000000 --- a/app/home/service/PreSgdStockService.php +++ /dev/null @@ -1,670 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreSgdStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreSgdStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreSgdStockModel::SIGN_STATUS_DONE)->where('open_status', PreSgdStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreSgdStockModel::SIGN_STATUS_DONE)->where('open_status', PreSgdStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status', PreSgdStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status', PreSgdStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->select(); - $total = $totalQuery->count(); - - $rows = []; - if (!$list->isEmpty()) { - foreach ($list as $item) { - // 是否延期开盘 - $is_defer = '0'; - if ($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreSgdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreSgdStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreSgdStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreSgdStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreSgdStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $item->is_post_pay, - 'logo' => $item->logo, - 'company_info' => $item->company_info, - 'company_open_time' => $item->company_open_time, - 'company_reg_amount' => $item->company_reg_amount, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - } - } - - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockOptionInrListModel::$tapeList, - 'stock_type_list' => PreSgdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preStock = PreSgdStockModel::where('id', $param['id'])->where('is_delete', PreSgdStockModel::IS_DELETE_NO)->where('status', PreSgdStockModel::STATUS_ON)->find(); - if (empty($preStock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreSgdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreSgdStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreSgdStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreSgdStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreSgdStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus, - ]; - - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockOptionInrListModel::$tapeList, - 'stock_type_list' => PreSgdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preSgdStock = PreSgdStockModel::where('id', $param['id']) - ->where('status', PreSgdStockModel::STATUS_ON) - ->where('is_delete', PreSgdStockModel::IS_DELETE_NO) - ->whereTime('start_time', '<=', date('Y-m-d H:i:s')) - ->whereTime('end_time', '>=', date('Y-m-d H:i:s')) - ->find(); - if (empty($preSgdStock)) { - return $this->toData('1', 'Params error', []); - } - - $hasOrder = UserSgdPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preSgdStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if (empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0) { - return $this->toData('1', 'Params error', []); - } - - if ($param['num'] < $preSgdStock->min) { - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preSgdStock->max > 0 && $param['num'] > $preSgdStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if ($preSgdStock->price <= 0) { - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserSgdPreStockOrderModel::PAY_TYPE_ONE, UserSgdPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $amount = bcmul($param['num'], $preSgdStock->price, 18); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_SGD)->value('purchase_fee'); - if ($purchaseFee <= 0) { - $fee = 0; - } else { - $fee = bcmul($amount, $purchaseFee, 18); - } - - - Db::startTrans(); - - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserSgdPreStockOrderModel; - $order->user_id = $userId; - $order->pre_stock_id = $preSgdStock->id; - $order->status = $param['pay_type'] == 1 ? UserSgdPreStockOrderModel::STATUS_DOING : UserSgdPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preSgdStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; - $order->get_time = $preSgdStock->get_time; - $bool = $order->save(); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - if ($param['pay_type'] == 2) { - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $userStockSgdName = (new UserStockSgdModel())->getName(); - $beforeAmount = Db::name($userStockSgdName)->where('stock_id', 'SGD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockSgdName)->where('stock_id', 'SGD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockSgdLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'SGD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = Db::name($userStockSgdName)->where('stock_id', 'SGD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockSgdName)->where('stock_id', 'SGD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockSgdLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'SGD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', []); - } - } - - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preInStock = PreSgdStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreSgdStockModel::STATUS_ON) - ->where('is_delete', PreSgdStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreSgdStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preInStock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserSgdPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserSgdPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserSgdPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preInStock->sign_status == PreSgdStockModel::SIGN_STATUS_DONE && strtotime($preInStock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockSgdLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'SGD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockSgdLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'SGD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserSgdPreStockOrderModel::where('id', $param['id'])->update(['status' => UserSgdPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preInStock->sign_status == PreSgdStockModel::SIGN_STATUS_NO && strtotime($preInStock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockSgdLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'SGD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockSgdModel::where('stock_id', 'SGD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockSgdLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'SGD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserSgdPreStockOrderModel::where('id', $param['id'])->update(['status' => UserSgdPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param, $userId) - { - try { - if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserSgdPreStockOrderModel::whereIn('status',$statusArr)->where('user_id', $userId)->order('update_time','desc')->page($param['page'], $param['limit'])->select(); - $total = UserSgdPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->count(); - - $rows = []; - if (!$list->isEmpty()) { - $stockIdList = []; - foreach ($list as $item) { - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreSgdStockModel::where('id', 'in', $stockIdList)->column(['*'], 'id'); - - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_SGD)->value('purchase_fee'); - foreach ($list as $item) { - $stock = $stockList[$item->pre_stock_id] ?? []; - $openTime = $stock['open_time'] ?? ''; - $openStatus = $stock['open_status'] ?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if ($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreSgdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserSgdPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserSgdPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockOptionInrListModel::$tapeList, - 'stock_type_list' => PreSgdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购订单详情 - public function detail($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $order = UserSgdPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if (empty($order)) { - return $this->toData('1', 'Params error', []); - } - - $stock = PreSgdStockModel::where('id', $order->pre_stock_id)->find(); - if (empty($stock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreSgdStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $data = [ - 'logo' => $stock->logo, - 'stock_code' => $stock->stock_code, - 'stock_name' => $stock->stock_name, - 'stock_type' => $stock->stock_type, - 'num' => $order->num, - 'get_num' => $order->get_num, - 'amount' => $order->amount, - 'get_amount' => $order->get_amount, - 'price' => $order->price, - 'fee' => $order->fee, - 'order_no' => $order->order_no, - 'get_fee' => $order->get_fee, - 'create_time' => $order->create_time, - 'get_time' => $order->get_time, - 'open_time' => $stock->open_time, - 'tape' => $stock->tape, - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockOptionInrListModel::$tapeList, - 'stock_type_list' => PreSgdStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/PreThaStockService.php b/app/home/service/PreThaStockService.php deleted file mode 100644 index 6eb8e65..0000000 --- a/app/home/service/PreThaStockService.php +++ /dev/null @@ -1,672 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreThaStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreThaStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreThaStockModel::SIGN_STATUS_DONE)->where('open_status', PreThaStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreThaStockModel::SIGN_STATUS_DONE)->where('open_status', PreThaStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status', PreThaStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status', PreThaStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->select(); - $total = $totalQuery->count(); - - $rows = []; - if (!$list->isEmpty()) { - foreach ($list as $item) { - // 是否延期开盘 - $is_defer = '0'; - if ($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreThaStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreThaStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreThaStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreThaStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreThaStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $item->is_post_pay, - 'logo' => $item->logo, - 'company_info' => $item->company_info, - 'company_open_time' => $item->company_open_time, - 'company_reg_amount' => $item->company_reg_amount, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus - ]; - } - } - - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockThaListModel::$tapeList, - 'stock_type_list' => PreThaStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preStock = PreThaStockModel::where('id', $param['id'])->where('is_delete', PreThaStockModel::IS_DELETE_NO)->where('status', PreThaStockModel::STATUS_ON)->find(); - if (empty($preStock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreThaStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreThaStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreThaStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreThaStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreThaStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus - ]; - - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockThaListModel::$tapeList, - 'stock_type_list' => PreThaStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preThaStock = PreThaStockModel::where('id', $param['id']) - ->where('status', PreThaStockModel::STATUS_ON) - ->where('is_delete', PreThaStockModel::IS_DELETE_NO) - ->whereTime('start_time', '<=', date('Y-m-d H:i:s')) - ->whereTime('end_time', '>=', date('Y-m-d H:i:s')) - ->find(); - if (empty($preThaStock)) { - return $this->toData('1', 'Params error', []); - } - - $hasOrder = UserThaPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preThaStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if (empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0) { - return $this->toData('1', 'Params error', []); - } - - if ($param['num'] < $preThaStock->min) { - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preThaStock->max > 0 && $param['num'] > $preThaStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if ($preThaStock->price <= 0) { - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserThaPreStockOrderModel::PAY_TYPE_ONE, UserThaPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $amount = bcmul($param['num'], $preThaStock->price, 18); - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_TG)->value('purchase_fee'); - if ($purchaseFee <= 0) { - $fee = 0; - } else { - $fee = bcmul($amount, $purchaseFee, 18); - } - - - Db::startTrans(); - - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserThaPreStockOrderModel; - $order->user_id = $userId; - $order->pre_stock_id = $preThaStock->id; - $order->status = $param['pay_type'] == 1 ? UserThaPreStockOrderModel::STATUS_DOING : UserThaPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preThaStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; - $order->get_time = $preThaStock->get_time; - $bool = $order->save(); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - if ($param['pay_type'] == 2) { - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $userStockName = (new UserStockThaModel())->getName(); - $beforeAmount = Db::name($userStockName)->where('stock_id', 'THB')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockName)->where('stock_id', 'THB')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockThaLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'THB'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = Db::name($userStockName)->where('stock_id', 'THB')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockName)->where('stock_id', 'THB')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockThaLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'THB'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - } catch (\Exception $exception) { - Db::rollback(); - Log::error("order tha exception " . $exception->getMessage()); - return $this->toData('1', 'System error', []); - } - } - - // 后支付 - 支付 - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preInStock = PreThaStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreThaStockModel::STATUS_ON) - ->where('is_delete', PreThaStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreThaStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preInStock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserThaPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserThaPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserThaPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preInStock->sign_status == PreThaStockModel::SIGN_STATUS_DONE && strtotime($preInStock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockThaLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'THB'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockThaLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'THB'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserThaPreStockOrderModel::where('id', $param['id'])->update(['status' => UserThaPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preInStock->sign_status == PreThaStockModel::SIGN_STATUS_NO && strtotime($preInStock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockThaLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'THB'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockThaModel::where('stock_id', 'THB')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockThaLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'THB'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserThaPreStockOrderModel::where('id', $param['id'])->update(['status' => UserThaPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param, $userId) - { - try { - if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserThaPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->order('update_time', 'desc')->page($param['page'], $param['limit'])->select(); - $total = UserThaPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId)->count(); - - $rows = []; - if (!$list->isEmpty()) { - $stockIdList = []; - foreach ($list as $item) { - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreThaStockModel::where('id', 'in', $stockIdList)->column(['*'], 'id'); - - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_TG)->value('purchase_fee'); - foreach ($list as $item) { - $stock = $stockList[$item->pre_stock_id] ?? []; - $openTime = $stock['open_time'] ?? ''; - $openStatus = $stock['open_status'] ?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if ($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreThaStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserThaPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserThaPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockThaListModel::$tapeList, - 'stock_type_list' => PreThaStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购订单详情 - public function detail($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $order = UserThaPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if (empty($order)) { - return $this->toData('1', 'Params error', []); - } - - $stock = PreThaStockModel::where('id', $order->pre_stock_id)->find(); - if (empty($stock)) { - return $this->toData('1', 'Params error', []); - } - $is_defer = '0'; - if ($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreThaStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $data = [ - 'logo' => $stock->logo, - 'stock_code' => $stock->stock_code, - 'stock_name' => $stock->stock_name, - 'stock_type' => $stock->stock_type, - 'num' => $order->num, - 'get_num' => $order->get_num, - 'amount' => $order->amount, - 'get_amount' => $order->get_amount, - 'price' => $order->price, - 'order_no' => $order->order_no, - 'fee' => $order->fee, - 'get_fee' => $order->get_fee, - 'create_time' => $order->create_time, - 'get_time' => $order->get_time, - 'open_time' => $stock->open_time, - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockThaListModel::$tapeList, - 'stock_type_list' => PreThaStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/PreUsStockService.php b/app/home/service/PreUsStockService.php deleted file mode 100644 index e0b882d..0000000 --- a/app/home/service/PreUsStockService.php +++ /dev/null @@ -1,681 +0,0 @@ -whereTime('end_time', '>', date('Y-m-d H:i:s')); - $totalQuery = $totalQuery->whereTime('end_time', '>', date('Y-m-d H:i:s')); - break; - case '2': - $query = $query->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreUsStockModel::SIGN_STATUS_NO); - $totalQuery = $totalQuery->whereTime('end_time', '<', date('Y-m-d H:i:s'))->where('sign_status', '=', PreUsStockModel::SIGN_STATUS_NO); - break; - case '3': - $query = $query->where('sign_status', '=', PreUsStockModel::SIGN_STATUS_DONE)->where('open_status', PreUsStockModel::OPEN_STATUS_NO); - $totalQuery = $totalQuery->where('sign_status', '=', PreUsStockModel::SIGN_STATUS_DONE)->where('open_status', PreUsStockModel::OPEN_STATUS_NO); - break; - case '4': - $query = $query->where('open_status', PreUsStockModel::OPEN_STATUS_HAD); - $totalQuery = $totalQuery->where('open_status', PreUsStockModel::OPEN_STATUS_HAD); - break; - } - } - - $list = $query->page($param['page'], $param['limit'])->select(); - $total = $totalQuery->count(); - - $rows = []; - if (!$list->isEmpty()) { - foreach ($list as $item) { - // 是否延期开盘 - $is_defer = '0'; - if ($item->open_time < date('Y-m-d H:i:s') && $item->open_status == PreUsStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($item->start_time <= date('Y-m-d H:i:s') && $item->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $item->end_time) $progressStatus = 2; - if ($item->sign_status == PreUsStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($item->is_post_pay == PreUsStockModel::IS_POST_PAY_YES && $item->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($item->open_status == PreUsStockModel::OPEN_STATUS_HAD) $progressStatus = $item->is_post_pay == PreUsStockModel::IS_POST_PAY_YES ? 5 : 4; - - $rows[] = [ - 'id' => $item->id, - 'stock_code' => $item->stock_code, - 'stock_name' => $item->stock_name, - 'stock_type' => $item->stock_type, - 'price' => $item->price, - 'min' => $item->min, - 'total' => $item->total, - 'tape' => $item->tape, - 'start_time' => $item->start_time, - 'end_time' => $item->end_time, - 'get_time' => $item->get_time, - 'open_time' => $item->open_time, - 'rate' => $item->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'pay_deadline_time' => $item->pay_deadline_time, - 'progress_status' => $progressStatus, - 'is_post_pay' => $item->is_post_pay, - ]; - } - } - - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockListModel::$tapeList, - 'stock_type_list' => PreUsStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 股票详情 - public function stockDetail($param) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $preStock = PreUsStockModel::where('id', $param['id'])->where('is_delete', PreUsStockModel::IS_DELETE_NO)->where('status', PreUsStockModel::STATUS_ON)->find(); - if (empty($preStock)) { - return $this->toData('1', 'Params error', []); - } - - $is_defer = '0'; - if ($preStock->open_time < date('Y-m-d H:i:s') && $preStock->open_status == PreUsStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $is_start = '0'; - if ($preStock->start_time <= date('Y-m-d H:i:s') && $preStock->end_time >= date('Y-m-d H:i:s')) { - $is_start = '1'; - } - - $progressStatus = 1; - if (time() >= $preStock->end_time) $progressStatus = 2; - if ($preStock->sign_status == PreUsStockModel::SIGN_STATUS_DONE) $progressStatus = 3; - if ($preStock->is_post_pay == PreUsStockModel::IS_POST_PAY_YES && $preStock->pay_deadline_time < date('Y-m-d H:i:s')) $progressStatus = 4; - if ($preStock->open_status == PreUsStockModel::OPEN_STATUS_HAD) $progressStatus = $preStock->is_post_pay == PreUsStockModel::IS_POST_PAY_YES ? 5 : 4; - - $data = [ - 'id' => $preStock->id, - 'stock_code' => $preStock->stock_code, - 'stock_name' => $preStock->stock_name, - 'stock_type' => $preStock->stock_type, - 'price' => $preStock->price, - 'min' => $preStock->min, - 'total' => $preStock->total, - 'tape' => $preStock->tape, - 'start_time' => $preStock->start_time, - 'end_time' => $preStock->end_time, - 'get_time' => $preStock->get_time, - 'open_time' => $preStock->open_time, - 'rate' => $preStock->rate, - 'is_defer' => $is_defer, - 'is_start' => $is_start, - 'is_post_pay' => $preStock->is_post_pay, - 'logo' => $preStock->logo, - 'company_info' => $preStock->company_info, - 'company_open_time' => $preStock->company_open_time, - 'company_reg_amount' => $preStock->company_reg_amount, - 'pay_deadline_time' => $preStock->pay_deadline_time, - 'progress_status' => $progressStatus - ]; - - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockListModel::$tapeList, - 'stock_type_list' => PreUsStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购操作 - public function order($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - - $preUsStock = PreUsStockModel::where('id', $param['id']) - ->where('status', PreUsStockModel::STATUS_ON) - ->where('is_delete', PreUsStockModel::IS_DELETE_NO) - ->whereTime('start_time', '<=', date('Y-m-d H:i:s')) - ->whereTime('end_time', '>=', date('Y-m-d H:i:s')) - ->find(); - if (empty($preUsStock)) { - return $this->toData('1', 'Params error3', []); - } - - $hasOrder = UserUsPreStockOrderModel::where('user_id', $userId)->where('pre_stock_id', $param['id'])->count(); - if ($preUsStock->limit_get_num <= $hasOrder) { - return $this->toData('1', 'Had Purchased', []); - } - - // 下单参数 - if (empty($param['num']) || !is_numeric($param['num']) || ceil($param['num']) != $param['num'] || $param['num'] <= 0) { - return $this->toData('1', 'Params error', []); - } - - if ($param['num'] < $preUsStock->min) { - return $this->toData('1', 'Order quantity less than the minimum', []); - } - - if ($preUsStock->max > 0 && $param['num'] > $preUsStock->max) { - return $this->toData('1', 'Order quantity greater than maximum', []); - } - - if ($preUsStock->price <= 0) { - return $this->toData('1', 'Price error', []); - } - - // 支付类型 - if (empty($param['pay_type']) || !is_numeric($param['pay_type']) || !in_array($param['pay_type'], [UserUsPreStockOrderModel::PAY_TYPE_ONE, UserUsPreStockOrderModel::PAY_TYPE_TWO])) { - return $this->toData('1', 'Params error', []); - } - - // 计算金额 - $price = number_format($preUsStock->price, 18, '.', ''); - $amount = bcmul($param['num'], $price, 18); - - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_USA)->value('purchase_fee'); - if ($purchaseFee <= 0) { - $fee = 0; - } else { - $purchaseFee = number_format($purchaseFee, 18, '.', ''); - $fee = bcmul($amount, $purchaseFee, 18); - } - - - Db::startTrans(); - - // 生成订单 - $orderNo = $this->generateOrderNumber(20); - $order = new UserUsPreStockOrderModel; - $order->user_id = $userId; - $order->pre_stock_id = $preUsStock->id; - $order->status = $param['pay_type'] == 1 ? UserUsPreStockOrderModel::STATUS_DOING : UserUsPreStockOrderModel::STATUS_POST_PAY; - $order->pay_type = $param['pay_type']; - $order->order_no = $orderNo; - $order->num = $param['num']; - $order->get_num = 0; - $order->price = $preUsStock->price; - $order->amount = $amount; - $order->get_amount = 0; - $order->fee = $fee; - $order->get_fee = 0; - $order->fee_rate = $purchaseFee; // 手续费比率 - $order->get_time = $preUsStock->get_time; - $bool = $order->save(); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'create order error', []); - } - - // 后支付模式 - 生成订单,无流水 - if ($param['pay_type'] == 2) { - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } - - // 扣除用户资产 - $userStockName = (new UserStockModel())->getName(); - $beforeAmount = Db::name($userStockName)->where('stock_id', 'USD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockName)->where('stock_id', 'USD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'USD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = Db::name($userStockName)->where('stock_id', 'USD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = Db::name($userStockName)->where('stock_id', 'USD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'USD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = date('Y-m-d H:i:s'); - $userStockLog->update_time = date('Y-m-d H:i:s'); - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - // 增加股票已经申购的数量 - $num = Db::name((new PreUsStockModel())->getName())->where('id', $param['id'])->inc('had_get_num', $param['num'])->update(['update_time' => date('Y-m-d H:i:s')]); - if ($num <= 0) { - Db::rollback(); - return $this->toData('1', 'update stock num error', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', [ - ]); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 后支付 - 支付 - public function postPay($param, $userId) - { - try { - if (empty($param['id']) || empty($param['stock_code']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error2', []); - } - $now = date('Y-m-d H:i:s'); - $preUstock = PreUsStockModel::where('stock_code', $param['stock_code']) - ->where('status', PreUsStockModel::STATUS_ON) - ->where('is_delete', PreUsStockModel::IS_DELETE_NO) - ->where('is_post_pay', PreUsStockModel::IS_POST_PAY_YES) - ->whereTime('pay_deadline_time', '>=', $now) - ->find(); - - if (empty($preUstock)) { - return $this->toData('1', 'Payment deadline exceeded', []); - } - - $hasOrder = UserUsPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->where('pay_type', UserUsPreStockOrderModel::PAY_TYPE_TWO)->where('status', UserUsPreStockOrderModel::STATUS_POST_PAY)->find(); - if (empty($hasOrder)) { - return $this->toData('1', 'Params error3', []); - } - - $orderNo = $hasOrder->order_no; - Db::startTrans(); - if ($preUstock->sign_status == PreUsStockModel::SIGN_STATUS_DONE && strtotime($preUstock->get_time) < strtotime($now)) { - //已签名 - - $amount = $hasOrder->get_amount; - $fee = $hasOrder->get_fee; - $getNum = $hasOrder->get_num; - if ($getNum <= 0) { - Db::rollback(); - return $this->toData('1', 'get num error', []); - } - - // 扣除用户资产 - $beforeAmount = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'USD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'USD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - - $bool = UserUsPreStockOrderModel::where('id', $param['id'])->update(['status' => UserUsPreStockOrderModel::STATUS_SIGNING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } elseif ($preUstock->sign_status == PreUsStockModel::SIGN_STATUS_NO && strtotime($preUstock->get_time) >= strtotime($now)) { - //未签名 - - $amount = $hasOrder->amount; - $fee = $hasOrder->fee; - // 扣除用户资产 - $beforeAmount = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId)->value('usable_num'); - if ($beforeAmount < $amount) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId) - ->where('usable_num', '>=', $amount)->dec('usable_num', $amount) - ->inc('frozen_num', $amount) - ->update(['update_time' => $now]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockLogModel(); - $userStockLog->user_id = $userId; - $userStockLog->change_type = 15; // 新股申购扣减费用 - $userStockLog->stock_id = 'USD'; - $userStockLog->before_num = $beforeAmount; - $userStockLog->change_num = '-' . $amount; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum2 = $userStockLog->save(); - if ($updateNum2 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user log error', []); - } - - // 扣除手续费 - if ($fee > 0) { - $beforeFee = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId)->value('usable_num'); - if ($beforeFee < $fee) { - Db::rollback(); - return $this->toData('1', 'assert not enough', []); - } - - $updateNum = UserStockModel::where('stock_id', 'USD')->where('user_id', $userId) - ->where('usable_num', '>=', $fee)->dec('usable_num', $fee) - ->inc('frozen_num', $fee) - ->update(['update_time' => date('Y-m-d H:i:s')]); - if ($updateNum <= 0) { - Db::rollback(); - return $this->toData('1', 'Update user amount error', []); - } - - // 生成流水 - $userStockLog = new UserStockLogModel; - $userStockLog->user_id = $userId; - $userStockLog->change_type = 16; - $userStockLog->stock_id = 'USD'; - $userStockLog->before_num = $beforeFee; - $userStockLog->change_num = '-' . $fee; - $userStockLog->order_id = $orderNo; - $userStockLog->create_time = $now; - $userStockLog->update_time = $now; - $updateNum3 = $userStockLog->save(); - if ($updateNum3 <= 0) { - Db::rollback(); - return $this->toData('1', 'create user fee log error', []); - } - } - $bool = UserUsPreStockOrderModel::where('id', $param['id'])->update(['status' => UserUsPreStockOrderModel::STATUS_DOING, 'update_time' => $now]); - if (!$bool) { - Db::rollback(); - return $this->toData('1', 'update order error', []); - } - - } else { - Db::rollback(); - return $this->toData('1', 'Params error4', []); - } - - Db::commit(); - return $this->toData('0', 'SUCCESS', []); - } catch (\Exception $exception) { - Db::rollback(); - return $this->toData('1', 'System error', [$exception->getMessage()]); - } - } - - // 申购记录 - public function list($param, $userId) - { - try { - if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { - $param['page'] = 1; - $param['limit'] = 20; - } - - if (empty($param['status'])) { - return $this->toData('1', 'Params error'); - } - - $statusArr = explode(",", $param['status']); - $list = UserUsPreStockOrderModel::whereIn('status', $statusArr)->where('user_id', $userId) - ->order('update_time', 'desc')->page($param['page'], $param['limit'])->select(); - - $total = UserUsPreStockOrderModel::where('status', $param['status'])->where('user_id', $userId)->count(); - - $rows = []; - if (!$list->isEmpty()) { - $stockIdList = []; - foreach ($list as $item) { - $stockIdList[] = $item->pre_stock_id; - } - $stockList = PreUsStockModel::where('id', 'in', $stockIdList)->column(['*'], 'id'); - - // 计算手续费 - $purchaseFee = FeeSettingModel::where('market_type', StockMarketModel::STOCK_MARKET_USA)->value('purchase_fee'); - foreach ($list as $item) { - $stock = $stockList[$item->pre_stock_id] ?? []; - $openTime = $stock['open_time'] ?? ''; - $openStatus = $stock['open_status'] ?? '0'; - - // 是否延期开盘 - $is_defer = '0'; - if ($openTime && $openTime < date('Y-m-d H:i:s') && $openStatus == PreUsStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $arr = [ - 'id' => $item->id, - 'order_no' => $item->order_no, - 'stock_code' => $stock['stock_code'] ?? '-', - 'stock_name' => $stock['stock_name'] ?? '-', - 'get_time' => $stock['get_time'] ?? '-', - 'open_time' => $stock['open_time'] ?? '-', - 'num' => $item->num, - 'get_num' => $item->get_num, - 'price' => $item->price, - 'amount' => $item->amount, - 'get_amount' => $item->get_amount, - 'create_time' => $item->create_time, - 'fee' => $item->fee, - 'get_fee' => $item->get_fee, - 'status' => $item->status, - 'tape' => $stock['tape'] ?? '-', - 'stock_type' => $stock['stock_type'] ?? '-', - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock['pay_deadline_time'] ?? '-', - ]; - - if ($item->pay_type == UserUsPreStockOrderModel::PAY_TYPE_TWO && $item->status == UserUsPreStockOrderModel::STATUS_POST_PAY && empty($item->get_time)) { - $arr['amount'] = bcmul($item->get_num, $item->price, 18); - if ($purchaseFee <= 0) { - $arr['fee'] = 0; - } else { - $arr['fee'] = bcmul($arr['amount'], $purchaseFee, 18); - } - } - $rows[] = $arr; - } - } - return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ - 'tape_list' => StockListModel::$tapeList, - 'stock_type_list' => PreUsStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } - - // 申购订单详情 - public function detail($param, $userId) - { - try { - if (empty($param['id']) || !is_numeric($param['id'])) { - return $this->toData('1', 'Params error', []); - } - - $order = UserUsPreStockOrderModel::where('user_id', $userId)->where('id', $param['id'])->find(); - if (empty($order)) { - return $this->toData('1', 'Params error', []); - } - - $stock = PreUsStockModel::where('id', $order->pre_stock_id)->find(); - if (empty($stock)) { - return $this->toData('1', 'Params error', []); - } - $is_defer = '0'; - if ($stock->open_time < date('Y-m-d H:i:s') && $stock->open_status == PreUsStockModel::OPEN_STATUS_NO) { - $is_defer = '1'; - } - - $data = [ - 'logo' => $stock->logo, - 'stock_code' => $stock->stock_code, - 'stock_name' => $stock->stock_name, - 'stock_type' => $stock->stock_type, - 'order_no' => $order->order_no, - 'num' => $order->num, - 'get_num' => $order->get_num, - 'amount' => $order->amount, - 'get_amount' => $order->get_amount, - 'price' => $order->price, - 'fee' => $order->fee, - 'get_fee' => $order->get_fee, - 'create_time' => $order->create_time, - 'get_time' => $order->get_time, - 'open_time' => $stock->open_time, - 'tape' => $stock->tape, - 'is_defer' => $is_defer, - 'stock_data' => $stock, - 'pay_deadline_time' => $stock->pay_deadline_time, - 'status' => $order->status - ]; - - return $this->toData('0', 'SUCCESS', ['data' => $data, 'extend' => [ - 'tape_list' => StockListModel::$tapeList, - 'stock_type_list' => PreUsStockModel::$stockTypeList, - ]]); - } catch (\Exception $exception) { - return $this->toData('1', 'System error', []); - } - } -} \ No newline at end of file diff --git a/app/home/service/UserService.php b/app/home/service/UserService.php index d80fd11..aad0797 100644 --- a/app/home/service/UserService.php +++ b/app/home/service/UserService.php @@ -7,10 +7,15 @@ use app\model\CountryModel; use app\model\FileModel; use app\model\UserContractModel; use app\model\UserDigitalModel; +use app\model\UserForexModel; use app\model\UserLevelModel; +use app\model\UserLoanModel; use app\model\UserLoginLog; use app\model\UserModel; +use app\model\UserMoneyModel; +use app\model\UserStockHkdModel; use app\model\UserStockModel; +use app\utility\Jwt; use app\utility\UnqId; use Couchbase\User; use think\exception\ValidateException; @@ -73,31 +78,41 @@ class UserService extends BaseHomeService */ private function initUserWallet(int $user_id) { - if (env('FEATURE.HAS_STOCK_US')) { - UserStockModel::InsertUserStock([ + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + UserMoneyModel::InsertUserMoneyk([ 'user_id' => $user_id, 'stock_id' => 'USD', 'usable_num' => 0, 'frozen_num' => 0, ]); - } - if (env('FEATURE.HAS_DIGITAL')) { - UserDigitalModel::InsertUserDigital([ - 'user_id' => $user_id, - 'digital_id' => 'USDT', - 'usable_num' => 0, - 'frozen_num' => 0, - ]); - } - if (env('FEATURE.HAS_CONTRACT')) { - UserContractModel::InsertUserContract([ - 'user_id' => $user_id, - 'contract_id' => 'USDT', - 'usable_num' => 0, - 'frozen_num' => 0, - ]); + }else{ + if (env('FEATURE.HAS_STOCK_US')) { + UserStockModel::InsertUserStock([ + 'user_id' => $user_id, + 'stock_id' => 'USD', + 'usable_num' => 0, + 'frozen_num' => 0, + ]); + } + if (env('FEATURE.HAS_DIGITAL')) { + UserDigitalModel::InsertUserDigital([ + 'user_id' => $user_id, + 'digital_id' => 'USDT', + 'usable_num' => 0, + 'frozen_num' => 0, + ]); + } + if (env('FEATURE.HAS_CONTRACT')) { + UserContractModel::InsertUserContract([ + 'user_id' => $user_id, + 'contract_id' => 'USDT', + 'usable_num' => 0, + 'frozen_num' => 0, + ]); + } } + } /** @@ -115,7 +130,7 @@ class UserService extends BaseHomeService return $this->toData('100403', 'Please log in first', []); } - $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,is_real,head_img_id,invite_code', $userId); + $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,is_real,head_img_id,invite_code,is_test_user', $userId); if (empty($info)) { return $this->toData('100400', 'The user does not exist.', []); } @@ -152,6 +167,7 @@ class UserService extends BaseHomeService 'phone' => $info['phone_number'], 'email' => $info['email'], 'isReal' => $info['is_real'], + 'is_test_user' => $info['is_test_user'], 'real_status' => $info['real_status'], 'inviteCode' => $info['invite_code'], 'firstName' => $info['first_name'], @@ -1228,6 +1244,64 @@ class UserService extends BaseHomeService return $this->toData('100500', 'The system is busy.', [$exception->getMessage()]); } } + public function apply_loan($userId, $param) + { + try { + // user_id + if (empty($userId) || $userId <= 0) { + return $this->toData('100403', 'Please log in first.', []); + } + + // 参数校验 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){ + return $this->toData('100402', 'You have applied, please be patient and wait.', []); + } + + $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', 'Binding successful.', []); + + } catch (ValidateException $validateException) { + // 参数校验失败 异常类 + $message = $validateException->getError(); + return $this->toData('100400', $message); + } catch (\Exception $exception) { + return $this->toData('100500', 'The system is busy.', [$exception->getMessage()]); + } + } + public function loan($userId, $param) + { + try { + // user_id + if (empty($userId) || $userId <= 0) { + return $this->toData('100403', '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); + // 返回结果 + return $this->toData('0', 'successful.', $list); + + } catch (ValidateException $validateException) { + // 参数校验失败 异常类 + $message = $validateException->getError(); + return $this->toData('100400', $message); + } catch (\Exception $exception) { + return $this->toData('100500', 'The system is busy.', [$exception->getMessage()]); + } + } + /** * @desc 退出登陆 @@ -1317,7 +1391,8 @@ class UserService extends BaseHomeService } if (in_array($user['lever_status'], [UserModel::LEVER_STATUS_NO, UserModel::LEVER_STATUS_FAIL])) { - UserModel::update(['lever_status' => UserModel::LEVER_STATUS_APPLY, 'update_time' => date('Y-m-d H:i:s')], ['user_id' => $userId]); + $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.', []); } @@ -1327,4 +1402,175 @@ class UserService extends BaseHomeService return $this->toData('100500', 'The system is busy.', []); } } + public function applyTestAccount($userId) + { + + if (empty($userId) || $userId <= 0) { + return $this->toData('100403', 'Please log in first.', []); + } + + // 获取用户信息 + $user = UserModel::getFieldsByUserId('test_account,user_id,user_no', $userId); + if (empty($user)) { + return $this->toData('100401', 'Please log in first.', []); + } + if(!empty($user['test_account'])){ + return $this->toData('0', 'success.', []); + } + //添加模拟账号 + $userNo=$this->getUniqUserNo(); + $email="test_".$userNo."@test.com"; + $salt = env('ENCRYPT.SALT'); + $password = (new UnqId())->encryptPassword('test12345', $salt); + $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); + UserModel::where('user_id', $userId)->update([ + 'test_account' => $test_userId + ]); + UserModel::where('user_id', $test_userId)->update([ + 'is_real' => 0, + 'real_status'=>3 + ]); + 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{ + UserDigitalModel::where('user_id', $test_userId)->update([ + 'user_id' => $test_userId, + 'digital_id' => 'USDT', + 'usable_num' => 100000, + 'frozen_num' => 0, + ]); + UserContractModel::where('user_id', $test_userId)->update([ + 'user_id' => $test_userId, + 'contract_id' => 'USDT', + 'usable_num' => 100000, + 'frozen_num' => 0, + ]); + UserForexModel::InsertUserForex([ + 'user_id' => $test_userId, + 'contract_id' => 'USD', + 'usable_num' => 100000, + 'frozen_num' => 0, + ]); + UserStockHkdModel::InsertUserStock([ + 'user_id' => $test_userId, + 'stock_id' => 'HKD', + 'usable_num' => 100000, + 'frozen_num' => 0, + ]); + } + + } + return $this->toData('0', 'success.', []); + } + public function applyTestMoney($userId,$param){ + if (empty($userId) || $userId <= 0) { + return $this->toData('100403', 'Please log in first.', []); + } + + // 获取用户信息 + $user = UserModel::getFieldsByUserId('is_test_user,user_id,user_no', $userId); + if (empty($user)) { + return $this->toData('100401', 'Please log in first.', []); + } + if($user['is_test_user']!=2){ + return $this->toData('100402', 'error.', []); + } + $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; + UserMoneyModel::where('user_id', $userId)->update([ + 'stock_id' => 'USD', + 'usable_num' => $update_num, + 'update_time' => date('Y-m-d H:i:s'), + ]); + + return $this->toData('0', 'success.', []); + } + public function testLogin($userId) + { + // 获取用户信息 + $user = UserModel::getFieldsByUserId('test_account,user_id,user_no', $userId); + if (empty($user)) { + return $this->toData('100401', 'Please log in first.', []); + } + if(empty($user['test_account'])){ + return $this->toData('100402', 'Please log in first.', []); + } + //登录模拟账号 + $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)) { + return $this->toData('100300', 'The system is busy.', []); + } + + // 将token存致缓存 覆盖新的缓存 实现单设备登陆 + $this->setUserTokenCache($token, $test_user['user_id']); + // 删除缓存 + $this->delUserTokenCache($userId); + // 返回结果以及用户信息 + return $this->toData('0', 'Request successful.', [ + 'userId' => $test_user['user_id'], + 'userNo' => $test_user['user_no'], + 'nickName' => $test_user['nick_name'], + 'inviteCode' => $test_user['invite_code'], + 'isReal' => $test_user['is_real'], + 'is_test_user' => $test_user['is_test_user'], + 'logo' => env('USER.DEFAULT_HEAD_IMG_PATH'), + 'token' => $token, + ]); + } + public function formalLogin($userId) + { + // 获取用户信息 + $user = UserModel::getFieldsByUserId('parent_id,user_id,user_no,is_test_user', $userId); + if (empty($user)) { + return $this->toData('100401', 'Please log in first.', []); + } + if(empty($user['parent_id'])){ + return $this->toData('100402', 'The system is busy.', []); + } + if(empty($user['is_test_user'])){ + return $this->toData('100403', 'The system is 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){ + return $this->toData('100404', 'The system is busy.', []); + } + // 生成token + $token = (new Jwt())->getToken($test_user['user_id'], env('ENCRYPT.SALT')); + if (empty($token)) { + return $this->toData('100300', 'The system is busy.', []); + } + + // 将token存致缓存 覆盖新的缓存 实现单设备登陆 + $this->setUserTokenCache($token, $test_user['user_id']); + // 删除缓存 + $this->delUserTokenCache($userId); + // 返回结果以及用户信息 + return $this->toData('0', 'Request successful.', [ + 'userId' => $test_user['user_id'], + 'userNo' => $test_user['user_no'], + 'nickName' => $test_user['nick_name'], + 'inviteCode' => $test_user['invite_code'], + 'isReal' => $test_user['is_real'], + 'is_test_user' => $test_user['is_test_user'], + 'logo' => env('USER.DEFAULT_HEAD_IMG_PATH'), + 'token' => $token, + ]); + } } diff --git a/app/home/service/UserVerifyService.php b/app/home/service/UserVerifyService.php index fdf1242..22cf14b 100644 --- a/app/home/service/UserVerifyService.php +++ b/app/home/service/UserVerifyService.php @@ -32,7 +32,7 @@ class UserVerifyService extends BaseHomeService } if(empty($params['back_img']) || !is_numeric($params['back_img'])){ - return $this->toData('100400','Invalid back_img'); + //return $this->toData('100400','Invalid back_img'); } // 判断用户状态 @@ -64,7 +64,7 @@ class UserVerifyService extends BaseHomeService $back = FileModel::where('id',$params['back_img'])->find(); if(empty($back)){ - return $this->toData('100400','back_img error'); + //return $this->toData('100400','back_img error'); } //锁屏密码 @@ -83,7 +83,7 @@ class UserVerifyService extends BaseHomeService $userVerify->code = $params['code']; $userVerify->name = $params['name']; $userVerify->front_img = $params['front_img']; - $userVerify->back_img = $params['back_img']; + $userVerify->back_img = isset($params['back_img']) ? $params['back_img'] :''; if (!empty($lockPassword)) $userVerify->lock_password = $lockPassword; $userVerify->create_time = date('Y-m-d H:i:s'); $userVerify->update_time = date('Y-m-d H:i:s'); diff --git a/app/home/service/WalletService.php b/app/home/service/WalletService.php index 2fa2ffb..bf6db09 100644 --- a/app/home/service/WalletService.php +++ b/app/home/service/WalletService.php @@ -21,6 +21,8 @@ use app\model\UserHkdPreStockOrderModel; use app\model\UserIdnPreStockOrderModel; use app\model\UserInPreStockOrderModel; use app\model\UserModel; +use app\model\UserMoneyLogModel; +use app\model\UserMoneyModel; use app\model\UserMysPreStockOrderModel; use app\model\UserSgdPreStockOrderModel; use app\model\UserStockBrlLogModel; @@ -75,6 +77,15 @@ class WalletService extends BaseHomeService */ public function getUserAssets(int $user_id, int $account_type): array { + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $result=UserMoneyModel::getUserMoney($user_id); + }else{ + $result=$this->getOldUserAssets($user_id,$account_type); + } + + return $this->toData(0, 'Request successful.', $result); + } + protected function getOldUserAssets(int $user_id, int $account_type){ switch ($account_type) { case 1: $result = [ @@ -307,7 +318,15 @@ class WalletService extends BaseHomeService ]; break; } - return $this->toData(0, 'Request successful.', $result); + return $result; + } + protected function getNewUserAssets(int $user_id){ + $res=UserMoneyModel::where('user_id',$user_id)->field('usable_num,frozen_num,stock_id as name')->select(); + $result=[]; + if(!empty($res)){ + $result=$res->toArray(); + } + return $result; } /** @@ -891,63 +910,68 @@ class WalletService extends BaseHomeService */ public function getUserBalance(array $data): array { - //账户类型:1现货,2合约,3美股 4 印尼股票 5 马来西呀 6 泰股 7印度股 8秒合约 9新加坡股 10基金 11印度期权 12港股 - switch ($data['account_type']) { - case 2: - $usdt_info = $this->getUserContract($data, 1); - break; - case 3: - $usdt_info = $this->getUserUsStock($data, 1); - break; - case 4: - $usdt_info = $this->getUserIdnStock($data, 1); - break; - case 5: - $usdt_info = $this->getUserMysStock($data, 1); - break; - case 6: - $usdt_info = $this->getUserThaStock($data, 1); - break; - case 7: - $usdt_info = $this->getUserInStock($data, 1); - break; - case 8: - $usdt_info = $this->getUserContractSec($data, 1); - break; - case 9: - $usdt_info = $this->getUserSgdStock($data, 1); - break; - case 10: - $usdt_info = $this->getUserFundStock($data, 1); - break; - case 11: - $usdt_info = $this->getUserInOption($data, 1); - break; - case 12: - $usdt_info = $this->getUserHkStock($data, 1); - break; - case 14: - $usdt_info = $this->getUserUkStock($data, 1); - break; - case 15: - $usdt_info = $this->getUserFurStock($data, 1); - break; - case 16: - $usdt_info = $this->getUserEurStock($data, 1); - break; - case 17: - $usdt_info = $this->getUserBrlStock($data, 1); - break; - case 18: - $usdt_info = $this->getUserJpStock($data, 1); - break; - case 19: - $usdt_info = $this->getUserForex($data, 1); - break; - default: - $usdt_info = $this->getUserDigital($data, 1); - break; + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $usdt_info = UserMoneyModel::getUserUSDByUserId($data); + }else{ + //账户类型:1现货,2合约,3美股 4 印尼股票 5 马来西呀 6 泰股 7印度股 8秒合约 9新加坡股 10基金 11印度期权 12港股 + switch ($data['account_type']) { + case 2: + $usdt_info = $this->getUserContract($data, 1); + break; + case 3: + $usdt_info = $this->getUserUsStock($data, 1); + break; + case 4: + $usdt_info = $this->getUserIdnStock($data, 1); + break; + case 5: + $usdt_info = $this->getUserMysStock($data, 1); + break; + case 6: + $usdt_info = $this->getUserThaStock($data, 1); + break; + case 7: + $usdt_info = $this->getUserInStock($data, 1); + break; + case 8: + $usdt_info = $this->getUserContractSec($data, 1); + break; + case 9: + $usdt_info = $this->getUserSgdStock($data, 1); + break; + case 10: + $usdt_info = $this->getUserFundStock($data, 1); + break; + case 11: + $usdt_info = $this->getUserInOption($data, 1); + break; + case 12: + $usdt_info = $this->getUserHkStock($data, 1); + break; + case 14: + $usdt_info = $this->getUserUkStock($data, 1); + break; + case 15: + $usdt_info = $this->getUserFurStock($data, 1); + break; + case 16: + $usdt_info = $this->getUserEurStock($data, 1); + break; + case 17: + $usdt_info = $this->getUserBrlStock($data, 1); + break; + case 18: + $usdt_info = $this->getUserJpStock($data, 1); + break; + case 19: + $usdt_info = $this->getUserForex($data, 1); + break; + default: + $usdt_info = $this->getUserDigital($data, 1); + break; + } } + return $this->toData(0, "ok", $usdt_info); } @@ -1052,6 +1076,12 @@ class WalletService extends BaseHomeService $drawal_data['total_amount'] = $apply_num; UserWithdrawalModel::InsertUserDrawalLog($drawal_data); + //扣除用户资金 + $from_update['usable_num'] = $cha_num;//round($cha_num,4); + $from_update['frozen_num'] = bcadd($from_account['frozen_num'], $data['apply_num'], 18);// round(($from_account['frozen_num']+$data['apply_num']),4); + $res = $this->updateUserBalance($data['account_type'], $from_update, $data['user_id']); + if (empty($res)) Db::rollback(); + $log_data['user_id'] = $data['user_id']; $log_data['change_type'] = 5; //冻结 $log_data['change_num'] = -$data['apply_num']; @@ -1077,8 +1107,17 @@ class WalletService extends BaseHomeService $order_info = UserWithdrawalModel::getUserDrawalInfo($data); if ($order_info['status'] == 0) { $obj = new AdminBaseService(); - $updateStatus = $obj->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $updateStatus = $obj->updateUserAssetNew($order_info['user_id'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + }else{ + $updateStatus = $obj->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); + } + if (!empty($updateStatus) && $updateStatus['status'] == 200) { + UserWithdrawalModel::where($data)->update([ + 'status' => 5, + 'update_time' => date('Y-m-d H:i:s') + ]); return $this->toData(0, 'Request successful.'); }else{ return $this->toData(500, "System error."); @@ -1136,80 +1175,84 @@ class WalletService extends BaseHomeService public function getUserBalanceRecord(array $data): array { $record_list = []; - //账户类型:1现货,2合约,3美股 - switch ($data['account_type']) { - case 1: - $record_list = UserDigitalLogModel::getUserBalanceLog($data); - break; - case 2: - $record_list = UserContractLogModel::getUserBalanceLog($data); - break; - case 3: - $record_list = UserStockLogModel::getUserBalanceLog($data); - break; - case 4: - // 印尼股票 - $record_list = UserStockIdnLogModel::getUserBalanceLog($data); - break; - case 5: - // 马来股票 - $record_list = UserStockMysLogModel::getUserBalanceLog($data); - break; - case 6: - // 泰国股票 - $record_list = UserStockThaLogModel::getUserBalanceLog($data); - break; - case 7: - // 印度股票 - $record_list = UserStockInLogModel::getUserBalanceLog($data); - break; - case 8: - // 秒合约 - $record_list = UserContractSecLogModel::getUserBalanceLog($data); - break; - case 9: - // 新加坡 - $record_list = UserStockSgdLogModel::getUserBalanceLog($data); - break; - case 10: - // 基金 - $record_list = UserStockFundLogModel::getUserBalanceLog($data); - break; - case 11: - // 印度期权 - $record_list = UserStockOptionInrLogModel::getUserBalanceLog($data); - break; - case 12: - // 香港 - $record_list = UserStockHkdLogModel::getUserBalanceLog($data); - break; - case 14: - // 德国 - $record_list = UserStockGBXLogModel::getUserBalanceLog($data); - break; - case 15: - // 法国 - $record_list = UserStockFurLogModel::getUserBalanceLog($data); - break; - case 16: - // 英国 - $record_list = UserStockEurLogModel::getUserBalanceLog($data); - break; - case 17: - // 巴西 - $record_list = UserStockBrlLogModel::getUserBalanceLog($data); - break; - case 18: - // 巴西 - $record_list = UserStockJpLogModel::getUserBalanceLog($data); - break; - case 19: - // 巴西 - $record_list =UserForexLogModel::getUserBalanceLog($data); - break; - default: - return $this->toData(1, "Please fill in the parameters according to the requirements."); - break; + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $record_list=UserMoneyLogModel::getUserBalanceLog($data); + }else{ + //账户类型:1现货,2合约,3美股 + switch ($data['account_type']) { + case 1: + $record_list = UserDigitalLogModel::getUserBalanceLog($data); + break; + case 2: + $record_list = UserContractLogModel::getUserBalanceLog($data); + break; + case 3: + $record_list = UserStockLogModel::getUserBalanceLog($data); + break; + case 4: + // 印尼股票 + $record_list = UserStockIdnLogModel::getUserBalanceLog($data); + break; + case 5: + // 马来股票 + $record_list = UserStockMysLogModel::getUserBalanceLog($data); + break; + case 6: + // 泰国股票 + $record_list = UserStockThaLogModel::getUserBalanceLog($data); + break; + case 7: + // 印度股票 + $record_list = UserStockInLogModel::getUserBalanceLog($data); + break; + case 8: + // 秒合约 + $record_list = UserContractSecLogModel::getUserBalanceLog($data); + break; + case 9: + // 新加坡 + $record_list = UserStockSgdLogModel::getUserBalanceLog($data); + break; + case 10: + // 基金 + $record_list = UserStockFundLogModel::getUserBalanceLog($data); + break; + case 11: + // 印度期权 + $record_list = UserStockOptionInrLogModel::getUserBalanceLog($data); + break; + case 12: + // 香港 + $record_list = UserStockHkdLogModel::getUserBalanceLog($data); + break; + case 14: + // 德国 + $record_list = UserStockGBXLogModel::getUserBalanceLog($data); + break; + case 15: + // 法国 + $record_list = UserStockFurLogModel::getUserBalanceLog($data); + break; + case 16: + // 英国 + $record_list = UserStockEurLogModel::getUserBalanceLog($data); + break; + case 17: + // 巴西 + $record_list = UserStockBrlLogModel::getUserBalanceLog($data); + break; + case 18: + // 巴西 + $record_list = UserStockJpLogModel::getUserBalanceLog($data); + break; + case 19: + // 巴西 + $record_list =UserForexLogModel::getUserBalanceLog($data); + break; + default: + return $this->toData(1, "Please fill in the parameters according to the requirements."); + break; + } } return $this->toData(0, "ok", $record_list); } @@ -1336,279 +1379,298 @@ class WalletService extends BaseHomeService public function lockUserBalance(int $account_type, int $user_id): array { - switch ($account_type) { - case 1: - return UserDigitalModel::getUserDigitalLock($user_id); - break; - case 2: - return UserContractModel::getUserContractLock($user_id); - break; - case 3: - // 美股 - return UserStockModel::getUserStockLock($user_id); - break; - case 4: - // 印尼 股 - return UserStockIdnModel::getUserStockLock($user_id); - break; - case 5: - // 马来西亚 股 - return UserStockMysModel::getUserStockLock($user_id); - break; - case 6: - // 泰 股 - return UserStockThaModel::getUserStockLock($user_id); - break; - case 7: - // 印度 股 - return UserStockInModel::getUserStockLock($user_id); - break; - case 8: - // 秒合约 - return UserContractSecModel::getUserContractLock($user_id); - break; - case 9: - // 新加坡 - return UserStockSgdModel::getUserStockLock($user_id); - break; - case 10: - // 基金 - return UserStockFundModel::getUserStockLock($user_id); - break; - case 11: - // 印度期权 - return UserStockOptionInrModel::getUserStockLock($user_id); - break; - case 12: - // 香港 - return UserStockHkdModel::getUserStockLock($user_id); - break; - case 14: - // 英国 - return UserStockGBXModel::getUserStockLock($user_id); - break; - case 15: - // 英国 - return UserStockFurModel::getUserStockLock($user_id); - break; - case 16: - // 英国 - return UserStockEurModel::getUserStockLock($user_id); - break; - case 17: - // 巴西 - return UserStockBrlModel::getUserStockLock($user_id); - break; - case 18: - // 巴西 - return UserStockJpModel::getUserStockLock($user_id); - break; - case 19: - // 巴西 - return UserForexModel::getUserForexLock($user_id); - break; - default: - return []; - break; + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + return UserMoneyModel::getUserUSDLock($user_id); + }else{ + switch ($account_type) { + case 1: + return UserDigitalModel::getUserDigitalLock($user_id); + break; + case 2: + return UserContractModel::getUserContractLock($user_id); + break; + case 3: + // 美股 + return UserStockModel::getUserStockLock($user_id); + break; + case 4: + // 印尼 股 + return UserStockIdnModel::getUserStockLock($user_id); + break; + case 5: + // 马来西亚 股 + return UserStockMysModel::getUserStockLock($user_id); + break; + case 6: + // 泰 股 + return UserStockThaModel::getUserStockLock($user_id); + break; + case 7: + // 印度 股 + return UserStockInModel::getUserStockLock($user_id); + break; + case 8: + // 秒合约 + return UserContractSecModel::getUserContractLock($user_id); + break; + case 9: + // 新加坡 + return UserStockSgdModel::getUserStockLock($user_id); + break; + case 10: + // 基金 + return UserStockFundModel::getUserStockLock($user_id); + break; + case 11: + // 印度期权 + return UserStockOptionInrModel::getUserStockLock($user_id); + break; + case 12: + // 香港 + return UserStockHkdModel::getUserStockLock($user_id); + break; + case 14: + // 英国 + return UserStockGBXModel::getUserStockLock($user_id); + break; + case 15: + // 英国 + return UserStockFurModel::getUserStockLock($user_id); + break; + case 16: + // 英国 + return UserStockEurModel::getUserStockLock($user_id); + break; + case 17: + // 巴西 + return UserStockBrlModel::getUserStockLock($user_id); + break; + case 18: + // 巴西 + return UserStockJpModel::getUserStockLock($user_id); + break; + case 19: + // 巴西 + return UserForexModel::getUserForexLock($user_id); + break; + default: + return []; + break; + } } + } public function updateUserBalance(int $account_type, array $update_data, int $user_id): bool { - switch ($account_type) { - case 1: - return UserDigitalModel::updateUserDigital($update_data, [ - 'user_id' => $user_id, - 'digital_id' => 'USDT' - ]); - break; - case 2: - return UserContractModel::updateUserContract($update_data, [ - 'user_id' => $user_id, - 'contract_id' => 'USDT' - ]); - break; - case 3: - return UserStockModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'USD' - ]); - break; - case 4: - return UserStockIdnModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'IDR' - ]); - break; - case 5: - return UserStockMysModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'MYR' - ]); - break; - case 6: - return UserStockThaModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'THB' - ]); - break; - case 7: - return UserStockInModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'INR' - ]); - break; - case 8: - return UserContractSecModel::updateUserContract($update_data, [ - 'user_id' => $user_id, - 'contract_id' => 'USDT' - ]); - break; - case 9: - return UserStockSgdModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'SGD' - ]); - break; - case 10: - return UserStockFundModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'USD' - ]); - break; - case 11: - return UserStockOptionInrModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'INR' - ]); - break; - case 12: - return UserStockHkdModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'HKD' - ]); - break; - case 14: - return UserStockGBXModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'GBX' - ]); - break; - case 15: - return UserStockFurModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'EUR' - ]); - break; - case 16: - return UserStockEurModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'EUR' - ]); - break; - case 17: - return UserStockBrlModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'BRL' - ]); - break; - case 18: - return UserStockJpModel::updateUserStock($update_data, [ - 'user_id' => $user_id, - 'stock_id' => 'JPY' - ]); - break; - case 19: - return UserForexModel::updateUserForex($update_data, [ - 'user_id' => $user_id, - 'contract_id' => 'USD' - ]); - break; - default: - return false; - break; + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + return UserMoneyModel::updateUserUSD($update_data,[ + 'user_id' => $user_id, + 'stock_id' => 'USD' + ]); + }else{ + switch ($account_type) { + case 1: + return UserDigitalModel::updateUserDigital($update_data, [ + 'user_id' => $user_id, + 'digital_id' => 'USDT' + ]); + break; + case 2: + return UserContractModel::updateUserContract($update_data, [ + 'user_id' => $user_id, + 'contract_id' => 'USDT' + ]); + break; + case 3: + return UserStockModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'USD' + ]); + break; + case 4: + return UserStockIdnModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'IDR' + ]); + break; + case 5: + return UserStockMysModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'MYR' + ]); + break; + case 6: + return UserStockThaModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'THB' + ]); + break; + case 7: + return UserStockInModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'INR' + ]); + break; + case 8: + return UserContractSecModel::updateUserContract($update_data, [ + 'user_id' => $user_id, + 'contract_id' => 'USDT' + ]); + break; + case 9: + return UserStockSgdModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'SGD' + ]); + break; + case 10: + return UserStockFundModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'USD' + ]); + break; + case 11: + return UserStockOptionInrModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'INR' + ]); + break; + case 12: + return UserStockHkdModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'HKD' + ]); + break; + case 14: + return UserStockGBXModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'GBX' + ]); + break; + case 15: + return UserStockFurModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'EUR' + ]); + break; + case 16: + return UserStockEurModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'EUR' + ]); + break; + case 17: + return UserStockBrlModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'BRL' + ]); + break; + case 18: + return UserStockJpModel::updateUserStock($update_data, [ + 'user_id' => $user_id, + 'stock_id' => 'JPY' + ]); + break; + case 19: + return UserForexModel::updateUserForex($update_data, [ + 'user_id' => $user_id, + 'contract_id' => 'USD' + ]); + break; + default: + return false; + break; + } } + } public function addUserBalanceLog(int $account_type, array $log_data): bool { - switch ($account_type) { - case 1: - $log_data['digital_id'] = 'USDT'; - return UserDigitalLogModel::InsertUserBalanceLog($log_data); - break; - case 2: - $log_data['contract_id'] = 'USDT'; - return UserContractLogModel::InsertUserBalanceLog($log_data); - break; - case 3: - $log_data['stock_id'] = 'USD'; - return UserStockLogModel::InsertUserBalanceLog($log_data); - break; - case 4: - $log_data['stock_id'] = 'IDR'; - return UserStockIdnLogModel::InsertUserBalanceLog($log_data); - break; - case 5: - $log_data['stock_id'] = 'MYR'; - return UserStockMysLogModel::InsertUserBalanceLog($log_data); - break; - case 6: - $log_data['stock_id'] = 'THB'; - return UserStockThaLogModel::InsertUserBalanceLog($log_data); - break; - case 7: - $log_data['stock_id'] = 'INR'; - return UserStockInLogModel::InsertUserBalanceLog($log_data); - break; - case 8: - $log_data['contract_id'] = 'USDT'; - return UserContractSecLogModel::InsertUserBalanceLog($log_data); - break; - case 9: - $log_data['stock_id'] = 'SGD'; - return UserStockSgdLogModel::InsertUserBalanceLog($log_data); - break; - case 10: - $log_data['stock_id'] = 'USD'; - return UserStockFundLogModel::InsertUserBalanceLog($log_data); - break; - case 11: - $log_data['stock_id'] = 'INR'; - return UserStockOptionInrLogModel::InsertUserBalanceLog($log_data); - break; - case 12: - $log_data['stock_id'] = 'HKD'; - return UserStockHkdLogModel::InsertUserBalanceLog($log_data); - break; - case 14: - $log_data['stock_id'] = 'GBX'; - return UserStockGBXLogModel::InsertUserBalanceLog($log_data); - break; - case 15: - $log_data['stock_id'] = 'EUR'; - return UserStockFurLogModel::InsertUserBalanceLog($log_data); - break; - case 16: - $log_data['stock_id'] = 'EUR'; - return UserStockEurLogModel::InsertUserBalanceLog($log_data); - break; - case 17: - $log_data['stock_id'] = 'BRL'; - return UserStockBrlLogModel::InsertUserBalanceLog($log_data); - break; - case 18: - $log_data['stock_id'] = 'JPY'; - return UserStockJpLogModel::InsertUserBalanceLog($log_data); - break; - case 19: - $log_data['contract_id'] = 'USD'; - return UserForexLogModel::InsertUserBalanceLog($log_data); - break; - default: - return false; - break; + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $log_data['stock_id'] = 'USD'; + return UserMoneyLogModel::InsertUserBalanceLog($log_data); + }else{ + switch ($account_type) { + case 1: + $log_data['digital_id'] = 'USDT'; + return UserDigitalLogModel::InsertUserBalanceLog($log_data); + break; + case 2: + $log_data['contract_id'] = 'USDT'; + return UserContractLogModel::InsertUserBalanceLog($log_data); + break; + case 3: + $log_data['stock_id'] = 'USD'; + return UserStockLogModel::InsertUserBalanceLog($log_data); + break; + case 4: + $log_data['stock_id'] = 'IDR'; + return UserStockIdnLogModel::InsertUserBalanceLog($log_data); + break; + case 5: + $log_data['stock_id'] = 'MYR'; + return UserStockMysLogModel::InsertUserBalanceLog($log_data); + break; + case 6: + $log_data['stock_id'] = 'THB'; + return UserStockThaLogModel::InsertUserBalanceLog($log_data); + break; + case 7: + $log_data['stock_id'] = 'INR'; + return UserStockInLogModel::InsertUserBalanceLog($log_data); + break; + case 8: + $log_data['contract_id'] = 'USDT'; + return UserContractSecLogModel::InsertUserBalanceLog($log_data); + break; + case 9: + $log_data['stock_id'] = 'SGD'; + return UserStockSgdLogModel::InsertUserBalanceLog($log_data); + break; + case 10: + $log_data['stock_id'] = 'USD'; + return UserStockFundLogModel::InsertUserBalanceLog($log_data); + break; + case 11: + $log_data['stock_id'] = 'INR'; + return UserStockOptionInrLogModel::InsertUserBalanceLog($log_data); + break; + case 12: + $log_data['stock_id'] = 'HKD'; + return UserStockHkdLogModel::InsertUserBalanceLog($log_data); + break; + case 14: + $log_data['stock_id'] = 'GBX'; + return UserStockGBXLogModel::InsertUserBalanceLog($log_data); + break; + case 15: + $log_data['stock_id'] = 'EUR'; + return UserStockFurLogModel::InsertUserBalanceLog($log_data); + break; + case 16: + $log_data['stock_id'] = 'EUR'; + return UserStockEurLogModel::InsertUserBalanceLog($log_data); + break; + case 17: + $log_data['stock_id'] = 'BRL'; + return UserStockBrlLogModel::InsertUserBalanceLog($log_data); + break; + case 18: + $log_data['stock_id'] = 'JPY'; + return UserStockJpLogModel::InsertUserBalanceLog($log_data); + break; + case 19: + $log_data['contract_id'] = 'USD'; + return UserForexLogModel::InsertUserBalanceLog($log_data); + break; + default: + return false; + break; + } } + } /** @@ -1662,17 +1724,23 @@ class WalletService extends BaseHomeService public function dealUnPayIPO(array $data):array { + if(env('ACCOUT_TYPE.ALL_IN_ONE')==1){ + $this->dealUnPayIPOByNew($data); + }else{ + $this->dealUnPayIPOByOld($data); + } + + return $this->toData(0, 'Request successful.',[]); + } + public function dealUnPayIPOByOld($data){ $total=UserArrearsModel::where('user_id',$data['user_id'])->where('account_type',$data['market_type'])->where('status',0)->sum('num'); $table_obj=(new \app\admin\service\setting\IPOService())->getStockModel($data['market_type']); $res=Db::table($table_obj['user_table'])->where('user_id',$data['user_id'])->where('stock_id',$table_obj['stock_id']) - ->where('usable_num','>=',$total) - ->find(); + ->where('usable_num','>=',$total)->find(); if(empty($res)){ return $this->toData(1, 'The balance is not enough.'); } - - $order_list=UserArrearsModel::where('user_id',$data['user_id'])->where('account_type',$data['market_type'])->select(); $nowDate=date('Y-m-d H:i:s'); Db::startTrans(); @@ -1685,6 +1753,7 @@ class WalletService extends BaseHomeService return $this->toData('1', 'system error0', []); } + foreach ($order_list as $order){ //生成支付流水 $insertStockLogArr = [ @@ -1748,7 +1817,101 @@ class WalletService extends BaseHomeService Db::commit(); - return $this->toData(0, 'Request successful.',[]); + } + public function dealUnPayIPOByNew($data){ + $total=UserArrearsModel::where('user_id',$data['user_id'])->where('account_type',$data['market_type'])->where('status',0)->sum('num'); + $table_obj=(new \app\admin\service\setting\IPOService())->getStockModel($data['market_type']); + $usd_total=0; + $rate = (new StockMarketModel())->getRate($data['market_type']); + $usd_total=$total/$rate; + $res=UserMoneyModel::where('user_id',$data['user_id'])->where('stock_id','USD') + ->where('usable_num','>=',$usd_total)->find(); + if(empty($res)){ + return $this->toData(1, 'The balance is not enough.'); + } + + $order_list=UserArrearsModel::where('user_id',$data['user_id'])->where('account_type',$data['market_type'])->select(); + $nowDate=date('Y-m-d H:i:s'); + Db::startTrans(); + //扣钱 + $update_bool = UserMoneyModel::where('stock_id', 'USD')->where('user_id', $data['user_id']) + ->dec('usable_num', $usd_total) + ->update(['update_time' => $nowDate]); + if(!$update_bool){ + Db::rollback(); + return $this->toData('1', 'system error0', []); + } + + + foreach ($order_list as $order){ + //生成支付流水 + $amount= Db::table($table_obj['order_table'])->where('order_no',$order['order_no'])->value('get_amount'); + $usd_amount=$amount/$rate; + $insertStockLogArr = [ + 'user_id' => $order['user_id'], + 'change_type' => 15, // 新股申购扣减费用 + 'stock_id' => $table_obj['stock_id'], + 'before_num' => 0, + 'change_num' => '-' .$usd_amount, + 'order_id' => $order['order_no'], + 'create_time' => $nowDate, + 'update_time' => $nowDate, + 'market_type' => $data['market_type'] + ]; + $log_bool = UserMoneyLogModel::InsertUserBalanceLog($insertStockLogArr); + if(!$log_bool){ + Db::rollback(); + return $this->toData('1', 'system error1', []); + } + // 生成扣手续流水 + $fee=Db::table($table_obj['order_table'])->where('order_no',$order['order_no'])->value('get_fee'); + $usd_fee= $fee/$rate; + $insertStockLogArrFee = [ + 'user_id' => $order['user_id'], + 'change_type' => 16, // 新股申购扣减费用 + 'stock_id' => $table_obj['stock_id'], + 'before_num' => 0, + 'change_num' => '-' . $usd_fee, + 'order_id' => $order['order_no'], + 'create_time' => $nowDate, + 'update_time' => $nowDate, + 'market_type' => $data['market_type'] + ]; + $fee_bool =UserMoneyLogModel::InsertUserBalanceLog($insertStockLogArrFee); + if (!$fee_bool) { + Db::rollback(); + return $this->toData('1', 'system error2', []); + } + + //更新状态 + $status_bool=UserArrearsModel::where('user_id',$order['user_id'])->where('order_no',$order['order_no'])->update([ + 'status'=>1, + 'update_time'=>$nowDate + ]); + if (!$status_bool) { + Db::rollback(); + return $this->toData('1', 'system error2', []); + } + //更新订单状态 + if(env('USER_ARREARS.HAS_USER_ARREARS')==3){ + $sign_status=Db::table($table_obj['stock_table'])->where('id',$order['pre_stock_id'])->value('sign_status'); + $order_bool=Db::table($table_obj['order_table'])->where('order_no',$order['order_no'])->where('user_id',$order['user_id']) + ->update([ + 'status'=> $sign_status==1 ? 2:3, + 'update_time'=>$nowDate + ]); + if (!$order_bool) { + Db::rollback(); + return $this->toData('1', 'system error3'.Db::table($table_obj['order_table'])->getLastSql(), []); + } + } + + //删除缓存订单 + $key="USER:ARREAR:ORDER:".$order['order_no']; + Cache::store('redis')->delete($key); + } + + Db::commit(); } // 获取账户之间划转手续费 public function getRateToTransfer($data) diff --git a/app/home/validate/UserValidate.php b/app/home/validate/UserValidate.php index f194013..78c4963 100644 --- a/app/home/validate/UserValidate.php +++ b/app/home/validate/UserValidate.php @@ -7,6 +7,8 @@ class UserValidate extends BaseHomeValidate protected $rule = [ 'country_id' => 'require|isString', 'file_id' => 'require|integer', + 'day' => 'require|integer', + 'num' => 'require|integer', 'email_code' => 'require|isString', 'sms_code' => 'require|isString', 'email_type' => 'require|in:1,2', // 1 给已经绑定的号发 2 给未绑定的号发 @@ -20,12 +22,14 @@ class UserValidate extends BaseHomeValidate 'password' => 'require|isString', 'password_new' => 'require|isString|length:6,150', 'nick_name' => 'require|isString|length:2,100', - 'first_name' => 'isString|length:2,100', - 'last_name' => 'isString|length:2,100', + 'first_name' => 'isString|length:1,100', + 'last_name' => 'isString|length:1,100', 'gender' => 'isString|in:0,1,2', ]; protected $message = [ + 'num.require' => 'The num is required.', + 'day.require' => 'The day is required.', 'country_id.require' => 'The country code is required.', 'country_id.isString' => 'The country code format is incorrect.', 'file_id.isString' => 'The file is required.', @@ -114,6 +118,7 @@ class UserValidate extends BaseHomeValidate // 'updatePhone' => ['phone', 'nation','sms_code','password'], // 修改绑定手机号 'updatePhone' => ['phone', 'nation', 'password'], // 修改绑定手机号 + 'apply_loan' => ['num', 'day'], // 修改绑定手机号 ]; } \ No newline at end of file diff --git a/app/model/ForexListMode.php b/app/model/ForexListMode.php deleted file mode 100644 index aed24df..0000000 --- a/app/model/ForexListMode.php +++ /dev/null @@ -1,79 +0,0 @@ -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/ForexMarketModel.php b/app/model/ForexMarketModel.php new file mode 100644 index 0000000..9223105 --- /dev/null +++ b/app/model/ForexMarketModel.php @@ -0,0 +1,11 @@ + '英股', 15 => '法股', 16 => '德股', + 17 => '巴股', + 18 => '日股', ]; public static $typeListEn = [ @@ -63,6 +65,8 @@ class StockBlockListModel extends BaseModel 14 => 'UK', 15 => 'FUR', 16 => 'EUR', + 17 => 'BRL', + 18 => 'JPY', ]; } \ No newline at end of file diff --git a/app/model/StockJpListModel.php b/app/model/StockJpListModel.php index 25c1cfc..afd442b 100644 --- a/app/model/StockJpListModel.php +++ b/app/model/StockJpListModel.php @@ -27,7 +27,14 @@ class StockJpListModel extends BaseModel // 交易所类型 const TAPE_IDX = '1'; + const TAPE_IDD = '2'; + const TAPE_FSE = '3'; + const TAPE_SP = '4'; + public static $tapeList = [ self::TAPE_IDX => 'TSE', + self::TAPE_IDD => 'NAG', + self::TAPE_FSE => 'FSE', + self::TAPE_SP => 'SAPSE', ]; } \ No newline at end of file diff --git a/app/model/UserBankModel.php b/app/model/UserBankModel.php index bfd4d50..8a59cd9 100644 --- a/app/model/UserBankModel.php +++ b/app/model/UserBankModel.php @@ -70,6 +70,8 @@ class UserBankModel extends BaseModel 'user_address'=>isset($data['user_address']) ? $data['user_address']:'', 'bank_address'=>isset($data['bank_address']) ? $data['bank_address']:'', 'ifsc'=>isset($data['ifsc']) ? $data['ifsc']:'', + 'branch_name'=>$data['branch_name'], + 'branch_phone'=>$data['branch_phone'], 'bank_code'=>$data['bank_code'], 'bank_country'=>$data['bank_country'], 'is_default'=>$data['is_default'], diff --git a/app/model/UserLoanModel.php b/app/model/UserLoanModel.php new file mode 100644 index 0000000..f5671dd --- /dev/null +++ b/app/model/UserLoanModel.php @@ -0,0 +1,22 @@ +count(); + $list = self::where($data['where'])->page($data['page'],$data['size'])->select(); + if(empty($list)){ + return []; + }else{ + return [ + 'total'=>$count, + 'list'=>$list->toArray() + ]; + } + } + +} \ No newline at end of file diff --git a/app/model/UserMoneyLogModel.php b/app/model/UserMoneyLogModel.php new file mode 100644 index 0000000..cb90487 --- /dev/null +++ b/app/model/UserMoneyLogModel.php @@ -0,0 +1,59 @@ +count(); + if($data['page']<1){ + $data['page']=1; + } + if($data['page_size']<1){ + $data['page_size']=10; + } + $list = self::where($where)->field('change_type,stock_id as name,change_num,create_time,order_id')->order('id desc')->page($data['page'],$data['page_size'])->select(); + if(empty($list)){ + return []; + } + return [ + 'total'=>$count, + 'list'=>$list->toArray(), + ]; + } + public static function InsertUserBalanceLog(array $data) + { + $self = new self; + $self->user_id = $data['user_id']; + $self->stock_id = $data['stock_id']; + if(isset($data['martket_type'])){ + $self->martket_type = $data['martket_type']; + } + if(isset($data['order_id'])){ + $self->order_id = $data['order_id']; + } + $self->change_type = $data['change_type']; + $self->change_num = $data['change_num']; + $self->before_num = $data['before_num']; + $self->create_time = date('Y-m-d H:i:s'); + $self->update_time = date('Y-m-d H:i:s'); + return $self->save(); + } +} \ No newline at end of file diff --git a/app/model/UserMoneyModel.php b/app/model/UserMoneyModel.php new file mode 100644 index 0000000..b682404 --- /dev/null +++ b/app/model/UserMoneyModel.php @@ -0,0 +1,81 @@ +field('usable_num,frozen_num,stock_id as name')->select(); + $result=[]; + if(!empty($res)){ + $result=$res->toArray(); + } + if(empty($result)){ + $info = new self; + $info->user_id = $user_id; + $info->stock_id = 'USD'; + $info->usable_num = 0; + $info->frozen_num = 0; + $info->create_time = date('Y-m-d H:i:s'); + $info->update_time = date('Y-m-d H:i:s'); + $info->save(); + $result=$info->toArray(); + } + return $result; + } + public static function getUserUSDByUserId(array $data):array + { + $info = self::where([ + 'user_id'=>$data['user_id'], + 'stock_id'=>'USD' + ])->field('usable_num,frozen_num,stock_id as name')->find(); + if(empty($info)){ + $info = new self; + $info->user_id = $data['user_id']; + $info->stock_id = 'USD'; + $info->usable_num = 0; + $info->frozen_num = 0; + $info->create_time = date('Y-m-d H:i:s'); + $info->update_time = date('Y-m-d H:i:s'); + $info->save(); + } + return $info->toArray(); + } + public static function InsertUserMoneyk(array $data) + { + $self = new self; + $self->user_id = $data['user_id']; + $self->stock_id = $data['stock_id']; + $self->usable_num = $data['usable_num']; + $self->frozen_num = $data['frozen_num']; + $self->create_time = date('Y-m-d H:i:s'); + $self->save(); + } + public static function getUserUSDLock(int $user_id,string $stock_id='USD'):array + { + $info = self::where([ + 'user_id'=>$user_id, + 'stock_id'=>$stock_id + ])->lock(true)->find(); + if(empty($info)){ + $info = new self; + $info->user_id = $user_id; + $info->stock_id = $stock_id; + $info->usable_num = 0; + $info->frozen_num = 0; + $info->create_time = date('Y-m-d H:i:s'); + $info->update_time = date('Y-m-d H:i:s'); + $info->save(); + } + return $info->toArray(); + } + public static function updateUserUSD(array $update_data,array $where) + { + $update_data['update_time']=date('Y-m-d H:i:s'); + $res=self::where($where)->save($update_data); + //echo self::where($where)->getLastSql(); + return $res; + } + +} \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..c9ed732 --- /dev/null +++ b/composer.json @@ -0,0 +1,64 @@ +{ + "name": "topthink/think", + "description": "the new thinkphp framework", + "type": "project", + "keywords": [ + "framework", + "thinkphp", + "ORM" + ], + "homepage": "https://www.thinkphp.cn/", + "license": "Apache-2.0", + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + }, + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "require": { + "php": ">=7.2.5", + "topthink/framework": "6.1.3", + "topthink/think-orm": "2.0.61", + "topthink/think-filesystem": "1.0.3", + "topthink/think-multi-app": "1.0.17", + "phpmailer/phpmailer": "6.8.0", + "alibabacloud/client": "1.5.32", + "firebase/php-jwt": "^6.8", + "topthink/think-queue": "^3.0", + "itinysun/tp-model-helper": "^1.0", + "geoip2/geoip2": "2.13", + "guzzlehttp/guzzle": "^7.7", + "lcobucci/jwt": "^4.0", + "phpoffice/phpspreadsheet": "^1.29", + "electrolinux/phpquery": "dev-master", + "fabpot/goutte": "*" + }, + "require-dev": { + "symfony/var-dumper": "^4.2", + "topthink/think-trace": "^1.0" + }, + "autoload": { + "psr-4": { + "app\\": "app" + }, + "psr-0": { + "": "extend/" + } + }, + "config": { + "preferred-install": "dist", + "allow-plugins": { + "topthink/think-installer": true + } + }, + "scripts": { + "post-autoload-dump": [ + "@php think service:discover", + "@php think vendor:publish" + ] + } +} diff --git a/config/app.php b/config/app.php index 6588fe9..570a280 100644 --- a/config/app.php +++ b/config/app.php @@ -28,7 +28,7 @@ return [ // 异常页面的模板文件 //'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', - 'exception_tmpl' => base_path().'sorry.html', + 'exception_tmpl' => base_path().'sorry.html', // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~',