diff --git a/app/admin/service/AdminBaseService.php b/app/admin/service/AdminBaseService.php index a2ed6de3..c3e46d19 100644 --- a/app/admin/service/AdminBaseService.php +++ b/app/admin/service/AdminBaseService.php @@ -221,6 +221,12 @@ class AdminBaseService $log_table = $prefix . 'user_forex_log'; $log_data['contract_id'] = 'USD'; break; + case 20: + $where['contract_id'] = 'INR'; + $table = $prefix . 'user_stock_index_inr'; + $log_table = $prefix . 'user_stock_index_inr_log`'; + $log_data['contract_id'] = 'INR'; + break; default: return [ 'status' => 100, diff --git a/app/admin/service/UserService.php b/app/admin/service/UserService.php index d4f51eb0..028c465f 100644 --- a/app/admin/service/UserService.php +++ b/app/admin/service/UserService.php @@ -587,6 +587,12 @@ class UserService extends AdminBaseService ->value('usable_num'); $rate = $marketArr['USD'] ?? 0; break; + case '20': + $originMoney = UserStockIndexInrModel::where('user_id', $param['id']) + ->where('contract_id', 'INR') + ->value('usable_num'); + $rate = $marketArr['INR'] ?? 0; + break; default: return $this->toData('1', '无权操作'); break; diff --git a/app/home/service/WalletService.php b/app/home/service/WalletService.php index 40316773..f000098d 100644 --- a/app/home/service/WalletService.php +++ b/app/home/service/WalletService.php @@ -63,6 +63,7 @@ use app\model\UserWalletaddressModel; use app\model\UserWithdrawalModel; use app\model\WalletListModel; use app\utility\UnqId; +use think\exception\ValidateException; use think\facade\Cache; use think\facade\Db; @@ -567,6 +568,24 @@ class WalletService extends BaseHomeService } } + // 获取用户印度股指资产 + private function getUserStockIndexInr($data, int $type = 0): array + { + try { + validate(WalletValidate::class)->scene('getUserBalance')->check($data); + if ($type == 0) { + return UserStockIndexInrModel::getUserStockList($data['user_id']); + } else { + return UserStockIndexInrModel::getUserStockByUserId($data); + } + } catch (ValidateException $validateException) { + $message = $validateException->getMessage(); + return $this->toData('1', $message, []); + } catch (\Exception $exception) { + return $this->toData('100500', 'The system is busy. Please try again later.', [$exception->getMessage(), $exception->getTrace()]); + } + } + /** * 获取用户印度股票 资产 * @param $user_id @@ -947,6 +966,9 @@ class WalletService extends BaseHomeService case 19: $usdt_info = $this->getUserForex($data, 1); break; + case 20: + $usdt_info = $this->getUserStockIndexInr($data, 1); + break; default: $usdt_info = $this->getUserDigital($data, 1); break; diff --git a/app/model/StockIndexInrTrade.php b/app/model/StockIndexInrTrade.php new file mode 100644 index 00000000..70529722 --- /dev/null +++ b/app/model/StockIndexInrTrade.php @@ -0,0 +1,74 @@ +$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/UserStockIndexInrModel.php b/app/model/UserStockIndexInrModel.php index 476c63d2..ab822729 100644 --- a/app/model/UserStockIndexInrModel.php +++ b/app/model/UserStockIndexInrModel.php @@ -26,6 +26,78 @@ class UserStockIndexInrModel extends BaseModel return $info->toArray(); } + public static function getUserStockByUserId(array $data):array + { + if(!empty($data['trade_name'])){ + $contract_id = $data['trade_name']; + }else{ + $contract_id = 'INR'; + } + $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 getUserStockList(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 = 'INR'; + $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']=='INR'){ + $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']=StockIndexInrTrade::getTradeOrderBuyNum($user_id,$val['name'],1); + $list[$key]['buy_down']=StockIndexInrTrade::getTradeOrderBuyNum($user_id,$val['name'],2); + } + + } + //获取平仓累计盈亏 + $daily_num=StockIndexInrTrade::getTradeOrderDailyNum($user_id); + $earnest_money=0; + $fee_num=StockIndexInrTrade::getTradeOrderFee($user_id); + return [ + 'earnest_money'=>(float)$earnest_money,//保证金 + 'daily_num'=>$daily_num,//累计盈亏 + 'fee_num'=>$fee_num,//累计盈亏 + 'list'=>$list->toArray() + ]; + } + public static function updateUserStockIndexInr(array $update_data,array $where) { $update_data['update_time']=date('Y-m-d H:i:s');