Browse Source

index inr

master
chuan 3 months ago
parent
commit
239c7147b0
  1. 6
      app/admin/service/AdminBaseService.php
  2. 6
      app/admin/service/UserService.php
  3. 22
      app/home/service/WalletService.php
  4. 74
      app/model/StockIndexInrTrade.php
  5. 72
      app/model/UserStockIndexInrModel.php

6
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,

6
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;

22
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;

74
app/model/StockIndexInrTrade.php

@ -0,0 +1,74 @@
<?php
namespace app\model;
class StockIndexInrTrade extends BaseModel
{
protected $name = 'stock_index_inr_trade';
protected $pk = 'trade_id';
// 获取持仓成本
public static function getTradeOrderBuyNum(int $user_id,string $contract_id,int $trade_type)
{
$num=0;
$money=0;
//查询持仓订单总成本
$list=self::where([
'user_id'=>$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'];
}
}
}

72
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');

Loading…
Cancel
Save