From 223ad1132b3dfd9d9733ac580ed82700e858406e Mon Sep 17 00:00:00 2001 From: chuan <2154243450@qq.com> Date: Sun, 27 Apr 2025 17:10:31 +0800 Subject: [PATCH] gold futures --- app/admin/controller/setting/GoldFutures.php | 23 ++++ app/admin/route/app.php | 22 +++- app/admin/service/UserService.php | 9 +- .../service/setting/GoldFuturesService.php | 53 +++++++++ app/admin/service/setting/IPOService.php | 25 ++++- .../service/setting/StockIndexService.php | 2 +- .../service/setting/StockMarketService.php | 12 +- app/home/service/WalletService.php | 32 +++++- app/model/ForexListMode.php | 79 ------------- app/model/GoldFuturesListModel.php | 7 ++ app/model/GoldFuturesTradeModel.php | 71 ++++++++++++ app/model/StockMarketModel.php | 46 ++++---- app/model/UserForexModel.php | 6 +- app/model/UserGoldFuturesModel.php | 105 ++++++++++++++++++ app/model/UserStockIndexInrModel.php | 4 +- 15 files changed, 371 insertions(+), 125 deletions(-) create mode 100644 app/admin/controller/setting/GoldFutures.php create mode 100644 app/admin/service/setting/GoldFuturesService.php delete mode 100644 app/model/ForexListMode.php create mode 100644 app/model/GoldFuturesListModel.php create mode 100644 app/model/GoldFuturesTradeModel.php create mode 100644 app/model/UserGoldFuturesModel.php diff --git a/app/admin/controller/setting/GoldFutures.php b/app/admin/controller/setting/GoldFutures.php new file mode 100644 index 00000000..f65ad6c6 --- /dev/null +++ b/app/admin/controller/setting/GoldFutures.php @@ -0,0 +1,23 @@ +getTradeNameList(); + return json($result); + } + + // 黄金期货列表 + public function goldFuturesList() + { + $result = (new GoldFuturesService())->inrStockIndexList($this->request->param()); + return json($result); + } + + +} diff --git a/app/admin/route/app.php b/app/admin/route/app.php index 4c68b187..590ab5a7 100644 --- a/app/admin/route/app.php +++ b/app/admin/route/app.php @@ -128,12 +128,6 @@ Route::group('/', function () { Route::post('/order/in_stock_back', 'Order/stockBack')->append(['market_type' =>7]); // 印度股票撤单 Route::post('/order/in_stock_clear', 'Order/stockClear')->append(['market_type' =>7]); // 印度股票平仓 - // 印度股指订单 - Route::post('order/inr_stock_index_hold', 'Order/StockHold')->append(['market_type' =>20]); // 印度股指持仓 - Route::post('order/inr_stock_index_place', 'Order/stockPlace')->append(['market_type' =>20]); // 印度股指挂单 - Route::post('order/inr_stock_index_back', 'Order/stockBack')->append(['market_type' =>20]); // 印度股指撤单 - Route::post('order/inr_stock_index_clear', 'Order/stockClear')->append(['market_type' =>20]); // 印度股指平仓 - // 新加坡股票 Route::post('/order/sgd_stock_hold', 'Order/StockHold')->append(['market_type' =>9]); Route::post('/order/sgd_stock_place', 'Order/stockPlace')->append(['market_type' =>9]); @@ -171,6 +165,18 @@ Route::group('/', function () { Route::post('/order/jp_stock_back', 'Order/StockBack')->append(['market_type' =>18]); // 股票撤单 Route::post('/order/jp_stock_clear', 'Order/StockClear')->append(['market_type' =>18]); // 股票平仓 + // 印度股指订单 + Route::post('order/inr_stock_index_hold', 'Order/StockHold')->append(['market_type' =>20]); // 印度股指持仓 + Route::post('order/inr_stock_index_place', 'Order/stockPlace')->append(['market_type' =>20]); // 印度股指挂单 + Route::post('order/inr_stock_index_back', 'Order/stockBack')->append(['market_type' =>20]); // 印度股指撤单 + Route::post('order/inr_stock_index_clear', 'Order/stockClear')->append(['market_type' =>20]); // 印度股指平仓 + + // 黄金期货订单 + Route::post('order/gold_futures_hold', 'Order/StockHold')->append(['market_type' =>21]); // 黄金期货持仓 + Route::post('order/gold_futures_place', 'Order/stockPlace')->append(['market_type' =>21]); // 黄金期货挂单 + Route::post('order/gold_futures_back', 'Order/stockBack')->append(['market_type' =>21]); // 黄金期货撤单 + Route::post('order/gold_futures_clear', 'Order/stockClear')->append(['market_type' =>21]); // 黄金期货平仓 + // 印度期权 Route::post('/order/in_option_hold', 'Order/inOptionHold'); // 股票持仓 Route::post('/order/in_option_place', 'Order/inOptionPlace'); // 股票挂单 @@ -362,6 +368,10 @@ Route::group('/', function () { Route::post('setting/inr_stock_index', 'setting.StockIndex/inrStockIndexList'); // 印度股指列表 Route::post('setting/inr_stock_select', 'setting.StockIndex/getTradeNameList'); // 印度股指名称列表 + // 黄金期货配置 + Route::post('setting/gold_futures_list', 'setting.GoldFutures/goldFuturesList'); // 黄金期货列表 + Route::post('setting/gold_futures_select', 'setting.GoldFutures/getTradeNameList'); // 黄金期货交易对列表 + // 外汇配置 Route::post('/setting/forex_index', 'setting.Forex/index'); Route::post('/setting/forex_add', 'setting.Forex/add')->middleware('admin_log'); diff --git a/app/admin/service/UserService.php b/app/admin/service/UserService.php index 92afd25c..b0fe07e0 100644 --- a/app/admin/service/UserService.php +++ b/app/admin/service/UserService.php @@ -20,6 +20,7 @@ use app\model\UserContractModel; use app\model\UserContractSecModel; use app\model\UserDigitalModel; use app\model\UserForexModel; +use app\model\UserGoldFuturesModel; use app\model\UserLoanModel; use app\model\UserLoginLog; use app\model\UserMarketModel; @@ -284,6 +285,10 @@ class UserService extends AdminBaseService $userForexList = UserForexModel::where('user_id', 'in', $userIdArr) ->where('contract_id', 'USD') ->column('usable_num,frozen_num', 'user_id'); + // 黄金期货的资产 + $userGoldFuturesList = UserGoldFuturesModel::where('user_id', 'in', $userIdArr) + ->where('contract_id', 'GC') + ->column('usable_num,frozen_num', 'user_id'); // 获取用户绑定的客服信息 $customerIds = []; @@ -398,6 +403,7 @@ class UserService extends AdminBaseService 'stock_mys' => $userStockMysList[$item['user_id']]['usable_num'] ?? '0', // 马股资产 'stock_in' => $userStockInList[$item['user_id']]['usable_num'] ?? '0', // 印度股资产 'stock_index_inr' => $userStockIndexInrList[$item['user_id']]['usable_num'] ?? '0', //印度股指资产 + 'gold_futures' => $userGoldFuturesList[$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', // 印度期权资产 @@ -418,7 +424,8 @@ class UserService extends AdminBaseService '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_index_inr_frozen' => $userStockIndexInrList[$item['user_id']]['frozen_num'] ?? '0', // 印度股指资产资产 + 'stock_index_inr_frozen' => $userStockIndexInrList[$item['user_id']]['frozen_num'] ?? '0', // 印度股指冻结资产 + 'gold_futures_frozen' => $userGoldFuturesList[$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', // 印度期权资产 diff --git a/app/admin/service/setting/GoldFuturesService.php b/app/admin/service/setting/GoldFuturesService.php new file mode 100644 index 00000000..3758b70d --- /dev/null +++ b/app/admin/service/setting/GoldFuturesService.php @@ -0,0 +1,53 @@ +order('id', 'desc')->column('name', 'id'); + return $this->toData('0', 'SUCCESS', ['list' => $list]); + } catch (\Exception $e) { + return $this->toData('1', '系统繁忙', [$e->getMessage(), $e->getTrace()]); + } + } + + // 黄金期货列表 + public function inrStockIndexList($param): array + { + try { + if (empty($param['page']) || empty($param['limit'])) { + return $this->toData('400', '缺少必要参数'); + } + + $where = []; + if (!empty($param['trade_name'])) { + $where[] = ['trade_name', 'like', '%' . $param['trade_name'] . '%']; + } + $list = GoldFuturesListModel::where($where)->order('id', 'desc')->paginate([ + 'page' => $param['page'], + 'list_rows' => $param['limit'], + ]); + + $tapeList = (new IPOService())->getStockTape(20); + + return $this->toData('0', 'SUCCESS', [ + 'list' => $list->items(), + 'total' => $list->total(), + 'page' => $list->currentPage(), + 'last_page' => $list->lastPage(), + 'extend' => [ + 'tape_list' => $tapeList['tape'], + 'source_list' => $tapeList['source'] ?? [], + ] + ]); + } catch (\Exception $e) { + return $this->toData('500', '系统繁忙', [$e->getMessage(), $e->getTrace()]); + } + } +} \ No newline at end of file diff --git a/app/admin/service/setting/IPOService.php b/app/admin/service/setting/IPOService.php index c4b502c2..dc4e770f 100644 --- a/app/admin/service/setting/IPOService.php +++ b/app/admin/service/setting/IPOService.php @@ -5,7 +5,6 @@ namespace app\admin\service\setting; use app\admin\service\AdminBaseService; use app\admin\validate\setting\StockValidate; -use app\model\ForexListMode; use app\model\PreBrlStockModel; use app\model\PreEurStockModel; use app\model\PreFurStockModel; @@ -21,19 +20,16 @@ use app\model\PreUsStockModel; use app\model\StockBrlListModel; use app\model\StockEurListModel; use app\model\StockFurListModel; -use app\model\StockFurTradeModel; 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; use app\model\StockPricesSettingModel; use app\model\StockSgdListModel; use app\model\StockThaListModel; -use app\model\TradeFeeModel; use app\model\UserArrearsModel; use app\model\UserModel; use app\model\UserUsPreStockOrderModel; @@ -1655,6 +1651,18 @@ class IPOService extends AdminBaseService 'check' => 'indexInr_stock_', ]; break; + case 21: + $result = [ + 'user_table' => $prefix . 'user_gold_futures', + 'log_table' => $prefix . 'user_gold_futures_log', + 'list_table' => $prefix . 'gold_futures_list', + 'trade_table' => $prefix . 'gold_futures_trade', + 'redis_key' => 'GoldFutures:STOCK:LIST:', + 'stock_id' => 'GC', // 黄金期货资产表中contract_id对应的值,即 bot_user_gold_futures.contract_id +// 'country' => '', +// 'check' => '', + ]; + break; default: $result = []; break; @@ -1741,12 +1749,14 @@ class IPOService extends AdminBaseService ]; break; case 19: + // 外汇 $result = [ 'tape' => [], 'type' => [], ]; break; case 20: + // 印度股指 $result = [ 'tape' =>[ 1 => "NSE", @@ -1758,6 +1768,13 @@ class IPOService extends AdminBaseService ], ]; break; + case 21: + // 黄金期货 + $result = [ + 'tape' => [], + 'type' => [], + ]; + break; } return $result; } diff --git a/app/admin/service/setting/StockIndexService.php b/app/admin/service/setting/StockIndexService.php index 95b5474b..7da0405d 100644 --- a/app/admin/service/setting/StockIndexService.php +++ b/app/admin/service/setting/StockIndexService.php @@ -75,7 +75,7 @@ class StockIndexService extends AdminBaseService $where = []; if (!empty($param['trade_name'])) { - $where[] = ['stock_code', 'like', '%' . $param['trade_name']]; + $where[] = ['trade_name', 'like', '%' . $param['trade_name'] . '%']; } $list = StockIndexInrListModel::where($where)->order('id', 'desc')->paginate([ 'page' => $param['page'], diff --git a/app/admin/service/setting/StockMarketService.php b/app/admin/service/setting/StockMarketService.php index 5169cd2a..7ccb8ceb 100644 --- a/app/admin/service/setting/StockMarketService.php +++ b/app/admin/service/setting/StockMarketService.php @@ -27,10 +27,14 @@ class StockMarketService extends AdminBaseService $rows = $list->toArray(); } - return $this->toData('0','SUCCESS', ['total' => count($rows), 'list' => $rows, 'extent' => [ - 'stock_market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, - 'trade_day_type' => StockMarketModel::TRADE_DAY_TYPE, - ]]); + return $this->toData('0','SUCCESS', [ + 'total' => count($rows), + 'list' => $rows, + 'extent' => [ + 'stock_market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, + 'trade_day_type' => StockMarketModel::TRADE_DAY_TYPE, + ] + ]); }catch (\Exception $exception){ return $this->toData('1', '系统繁忙', [$exception->getMessage()]); } diff --git a/app/home/service/WalletService.php b/app/home/service/WalletService.php index 1a10ed0c..f3ee4f3b 100644 --- a/app/home/service/WalletService.php +++ b/app/home/service/WalletService.php @@ -18,6 +18,7 @@ use app\model\UserContractSecModel; use app\model\UserDigitalModel; use app\model\UserForexLogModel; use app\model\UserForexModel; +use app\model\UserGoldFuturesModel; use app\model\UserHkdPreStockOrderModel; use app\model\UserIdnPreStockOrderModel; use app\model\UserInPreStockOrderModel; @@ -586,6 +587,24 @@ class WalletService extends BaseHomeService } } + // 获取用户黄金期货资产 + private function getUserGoldFutures($data, int $type = 0): array + { + try { + validate(WalletValidate::class)->scene('getUserBalance')->check($data); + if ($type == 0) { + return UserGoldFuturesModel::getUserGoldFuturesList($data['user_id']); + } else { + return UserGoldFuturesModel::getUserGoldFutureByUserId($data); + } + } catch (ValidateException $validateException) { + $message = $validateException->getMessage(); + return $this->toData('500', $message, []); + } catch (\Exception $exception) { + return $this->toData('500', lang('system_busy'), [$exception->getMessage(), $exception->getTrace()]); + } + } + /** * 获取用户印度股票 资产 * @param $user_id @@ -969,6 +988,9 @@ class WalletService extends BaseHomeService case 20: $usdt_info = $this->getUserStockIndexInr($data, 1); break; + case 21: + $usdt_info = $this->getUserGoldFutures($data, 1); + break; default: $usdt_info = $this->getUserDigital($data, 1); break; @@ -1451,9 +1473,12 @@ class WalletService extends BaseHomeService // 印度股指 return UserStockIndexInrModel::getUserStockIndexInrLock($user_id); break; + case 21: + // 黄金期货 + return UserGoldFuturesModel::getUserGoldFuturesLock($user_id); + break; default: return []; - break; } } @@ -1572,6 +1597,11 @@ class WalletService extends BaseHomeService 'user_id' => $user_id, 'contract_id' => 'INR' ]); + case 21: + return UserGoldFuturesModel::updateUserGoldFutures($update_data, [ + 'user_id' => $user_id, + 'contract_id' => 'GC' + ]); break; default: return false; diff --git a/app/model/ForexListMode.php b/app/model/ForexListMode.php deleted file mode 100644 index aed24df4..00000000 --- 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/GoldFuturesListModel.php b/app/model/GoldFuturesListModel.php new file mode 100644 index 00000000..eaf57d0d --- /dev/null +++ b/app/model/GoldFuturesListModel.php @@ -0,0 +1,7 @@ +$user_id, + 'status'=>1, + 'contract_id'=>$contract_id, + 'trade_type'=>$trade_type + ])->field('order_number,deal_price,service_cost')->select(); + if(!empty($list)) { + $list_arr=$list->toArray(); + foreach ($list_arr as $val){ + $order_num=$val['order_number']*$val['deal_price'] ;//+ $val['service_cost']; + $money+=$order_num; + $num+=$val['order_number']; + } + } + return [ + 'buy_num'=>$num, + 'buy_money'=>$money + ]; + } + + // 获取累计盈亏 + public static function getTradeOrderDailyNum(int $user_id) + { + $num=0; + //查询持仓订单总成本 + $list=self::where([ + 'user_id'=>$user_id, + 'status'=>3 + ])->field('order_number,closing_price,deal_price,closing_cost,service_cost,trade_type')->select(); + if(!empty($list)) { + $list_arr=$list->toArray(); + foreach ($list_arr as $val){ + if($val['trade_type']==1){ + $order_num=$val['order_number']*($val['closing_price']-$val['deal_price']); + }else{ + $order_num=$val['order_number']*($val['deal_price']-$val['closing_price']); + } + $num+=$order_num; + } + } + return $num; + } + + public static function getTradeOrderFee(int $user_id) + { + $info=self::where([ + ['user_id','=',$user_id], + ['status','in',[1,3]] + ])->field('sum(service_cost+closing_cost) as fee')->find(); + if(empty($info)){ + return 0; + }else{ + $info=$info->toArray(); + return empty($info['fee']) ? 0 : $info['fee']; + } + } +} \ No newline at end of file diff --git a/app/model/StockMarketModel.php b/app/model/StockMarketModel.php index 168de912..9788aaed 100644 --- a/app/model/StockMarketModel.php +++ b/app/model/StockMarketModel.php @@ -27,27 +27,27 @@ class StockMarketModel extends BaseModel protected $name = 'stock_market'; protected $pk = 'id'; - // 股票市场类型 - // 1 现货 2 合约 3 美股 4 印尼 5 马股 6 泰股 7 印度股 - const DIGITAL_MARKET = '1'; - const CONTRACT_MARKET = '2'; - const STOCK_MARKET_USA = '3'; - const STOCK_MARKET_YNG = '4'; - const STOCK_MARKET_MG = '5'; - const STOCK_MARKET_TG = '6'; - const STOCK_MARKET_IN = '7'; - const STOCK_MARKET_HY = '8'; - const STOCK_MARKET_SGD = '9'; - const STOCK_MARKET_FUND = '10'; - const STOCK_MARKET_OPTION_IN = '11'; - const STOCK_MARKET_HK = '12'; - const STOCK_MARKET_UK = '14'; - const STOCK_MARKET_FUR = '15'; - const STOCK_MARKET_EUR = '16'; - const STOCK_MARKET_BRL = '17'; - const STOCK_MARKET_JP = '18'; - const FOREX_MARKET = '19'; - const STOCK_INR_INDEX = '20'; + // 市场类型:1-现货(数字币) 2-合约 3-美股 4-印尼股 5-马股 6-泰股 7-印度股 8-秒合约 9-新加坡股 10-基金 11-印度期权 12-港股 14-英股 15-法股 16-德股 17-巴西股 18-日股 19-外汇 20-印度股指 21-黄金期货 + const DIGITAL_MARKET = 1; + const CONTRACT_MARKET = 2; + const STOCK_MARKET_USA = 3; + const STOCK_MARKET_YNG = 4; + const STOCK_MARKET_MG = 5; + const STOCK_MARKET_TG = 6; + const STOCK_MARKET_IN = 7; + const STOCK_MARKET_HY = 8; + const STOCK_MARKET_SGD = 9; + const STOCK_MARKET_FUND = 10; + const STOCK_MARKET_OPTION_IN = 11; + const STOCK_MARKET_HK = 12; + const STOCK_MARKET_UK = 14; + const STOCK_MARKET_FUR = 15; + const STOCK_MARKET_EUR = 16; + const STOCK_MARKET_BRL = 17; + const STOCK_MARKET_JP = 18; + const FOREX_MARKET = 19; + const STOCK_INR_INDEX = 20; + const GOLD_FUTURES = 21; const STOCK_MARKET_TYPE = [ self::DIGITAL_MARKET => '现货', @@ -69,6 +69,7 @@ class StockMarketModel extends BaseModel self::STOCK_MARKET_JP => '日股', self::FOREX_MARKET => '外汇', self::STOCK_INR_INDEX => '印度股指', + self::GOLD_FUTURES => '黄金期货', ]; // 各类型交易记录表 @@ -92,6 +93,7 @@ class StockMarketModel extends BaseModel self::STOCK_MARKET_JP => 'bot_stock_jp_trade', // 日本股交易记录表 self::FOREX_MARKET => 'bot_forex_trade', // 外汇交易记录表 self::STOCK_INR_INDEX => 'stock_index_inr_trade', // 印度股指交易记录表 + self::GOLD_FUTURES => 'bot_gold_futures_trade', // 黄金期货 ]; // 状态 @@ -120,7 +122,7 @@ class StockMarketModel extends BaseModel return $rate; } - // + public function getAllTape(){ return [ self::STOCK_MARKET_USA => StockListModel::$tapeList, diff --git a/app/model/UserForexModel.php b/app/model/UserForexModel.php index 98b179eb..17086871 100644 --- a/app/model/UserForexModel.php +++ b/app/model/UserForexModel.php @@ -91,7 +91,6 @@ class UserForexModel extends BaseModel } - public static function InsertUserForex(array $data) { $self = new self; @@ -102,12 +101,11 @@ class UserForexModel extends BaseModel $self->create_time = date('Y-m-d H:i:s'); $self->save(); } + public static function updateUserForex(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; + return self::where($where)->save($update_data); } diff --git a/app/model/UserGoldFuturesModel.php b/app/model/UserGoldFuturesModel.php new file mode 100644 index 00000000..4571db74 --- /dev/null +++ b/app/model/UserGoldFuturesModel.php @@ -0,0 +1,105 @@ +$user_id, + 'contract_id'=>$contract_id + ])->lock(true)->find(); + if(empty($info)){ + // 如果没有则创建 + $info = new self; + $info->user_id = $user_id; + $info->contract_id = $contract_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 getUserGoldFutureByUserId(array $data):array + { + if(!empty($data['trade_name'])){ + $contract_id = $data['trade_name']; + }else{ + $contract_id = 'GC'; + } + $info = self::where([ + 'user_id' => $data['user_id'], + 'contract_id' => $contract_id + ])->field('usable_num,frozen_num,contract_id as name')->find(); + if(empty($info)){ + $info = new self; + $info->user_id = $data['user_id']; + $info->contract_id = $contract_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 getUserGoldFuturesList(int $user_id):array + { + $list = self::where([ + 'user_id' => $user_id, + ])->field('usable_num,frozen_num,contract_id as name')->select(); + if($list->isEmpty()){ + $self = new self; + $self->user_id = $user_id; + $self->contract_id = 'GC'; + $self->usable_num = '0'; + $self->frozen_num = '0'; + $self->create_time = date('Y-m-d H:i:s'); + $self->update_time = date('Y-m-d H:i:s'); + $self->save(); + + $list = self::where([ + 'user_id'=>$user_id, + ])->field('usable_num,frozen_num,contract_id as name')->select(); + } + foreach ($list as $key=>$val){ + if($val['name']=='GC'){ + $list[$key]['buy_up']=[ + 'buy_num'=>0, + 'buy_money'=>0 + ]; + $list[$key]['buy_down']=[ + 'buy_num'=>0, + 'buy_money'=>0 + ]; + }else{ + //获取持仓成本 + $list[$key]['buy_up']=GoldFuturesTradeModel::getTradeOrderBuyNum($user_id,$val['name'],1); + $list[$key]['buy_down']=GoldFuturesTradeModel::getTradeOrderBuyNum($user_id,$val['name'],2); + } + + } + //获取平仓累计盈亏 + $daily_num=GoldFuturesTradeModel::getTradeOrderDailyNum($user_id); + $earnest_money=0; + $fee_num=GoldFuturesTradeModel::getTradeOrderFee($user_id); + return [ + 'earnest_money'=>(float)$earnest_money,//保证金 + 'daily_num'=>$daily_num,//累计盈亏 + 'fee_num'=>$fee_num,//累计盈亏 + 'list'=>$list->toArray() + ]; + } + + public static function updateUserGoldFutures(array $update_data,array $where) + { + $update_data['update_time']=date('Y-m-d H:i:s'); + return self::where($where)->save($update_data); + } +} \ No newline at end of file diff --git a/app/model/UserStockIndexInrModel.php b/app/model/UserStockIndexInrModel.php index ab822729..9c3a5b7c 100644 --- a/app/model/UserStockIndexInrModel.php +++ b/app/model/UserStockIndexInrModel.php @@ -101,9 +101,7 @@ class UserStockIndexInrModel extends BaseModel public static function updateUserStockIndexInr(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; + return self::where($where)->save($update_data); } } \ No newline at end of file