$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 = 'USD'; } $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 = 'USD'; $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']=='USD'){ $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); } }