bourse stock
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1046 lines
46 KiB

<?php
namespace app\admin\controller;
use app\admin\service\AdminBaseService;
use app\admin\service\setting\IPOService;
use app\model\BrokerageSettingModel;
use app\model\ContractListMode;
use app\model\ContractTradeModel;
use app\model\DigitalListModel;
use app\model\DigitalTradeModel;
use app\model\DrawalSettingModel;
use app\model\FeeSettingModel;
use app\model\ForexListModel;
use app\model\PreIdnStockModel;
use app\model\PreInStockModel;
use app\model\PreMysStockModel;
use app\model\PreSgdStockModel;
use app\model\PreThaStockModel;
use app\model\PreUsStockModel;
use app\model\RechargeApplyModel;
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\StockIdnTradeModel;
use app\model\StockInListModel;
use app\model\StockInTradeModel;
use app\model\StockJpListModel;
use app\model\StockListModel;
use app\model\StockMarketModel;
use app\model\StockMysListModel;
use app\model\StockMysTradeModel;
use app\model\StockOptionInrListModel;
use app\model\StockSgdListModel;
use app\model\StockThaListModel;
use app\model\StockThaTradeModel;
use app\model\StockTradeModel;
use app\model\UserIdnPreStockOrderModel;
use app\model\UserInPreStockOrderModel;
use app\model\UserModel;
use app\model\UserMysPreStockOrderModel;
use app\model\UserSgdPreStockOrderModel;
use app\model\UserStockIdnLogModel;
use app\model\UserStockIdnModel;
use app\model\UserStockInLogModel;
use app\model\UserStockInModel;
use app\model\UserStockLogModel;
use app\model\UserStockModel;
use app\model\UserStockMysLogModel;
use app\model\UserStockMysModel;
use app\model\UserStockSgdLogModel;
use app\model\UserStockSgdModel;
use app\model\UserStockThaLogModel;
use app\model\UserStockThaModel;
use app\model\UserThaPreStockOrderModel;
use app\model\UserUsPreStockOrderModel;
use app\model\UserWithdrawalModel;
use app\utility\ClientGo;
use think\facade\Db;
use think\facade\Queue;
use PhpOffice\PhpSpreadsheet\IOFactory;
class Index extends AdminBaseController
{
public function index()
{
try {
$prefix = env('DATABASE.prefix');
$ContractTradeTableName = $prefix . (new ContractTradeModel())->getName();
$digitalTradeTableName = $prefix . (new DigitalTradeModel())->getName();
$rechargeApplyTableName = $prefix . (new RechargeApplyModel())->getName();
$stockTradeTableName = $prefix . (new StockTradeModel())->getName();
$stockMysTradeTableName = $prefix . (new StockMysTradeModel())->getName();
$stockThaTradeTableName = $prefix . (new StockThaTradeModel())->getName();
$stockIdnTradeTableName = $prefix . (new StockIdnTradeModel())->getName();
$stockInTradeTableName = $prefix . (new StockInTradeModel())->getName();
$userTableName = $prefix . (new UserModel())->getName();
$userWithdrawTableName = $prefix . (new UserWithdrawalModel())->getName();
// 总注册人数(用户的总数)
$totalRegisterNum = Db::table($userTableName)->count();
// 总充值用户(充值用户的个数 以用户id分组)
$totalRechargeNum = Db::table($rechargeApplyTableName)->where('status', 1)->group('user_id')->count();
// 总交易用户(合约 股票 现货 交易的用户去重 订单状态为持仓 和 完成 订单)
$contractTradeUserId = Db::table($ContractTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$stockTradeUserId = Db::table($stockTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$stockMysTradeUserId = Db::table($stockMysTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$stockThaTradeUserId = Db::table($stockThaTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$stockIdnTradeUserId = Db::table($stockIdnTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$stockInTradeUserId = Db::table($stockInTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$digitalTradeUserId = Db::table($digitalTradeTableName)->where('status', 'in', [1, 3])->distinct(true)->column('user_id');
$totalArrayMerge = array_unique(array_merge($contractTradeUserId, $stockTradeUserId, $digitalTradeUserId, $stockMysTradeUserId, $stockIdnTradeUserId, $stockThaTradeUserId, $stockInTradeUserId));
$totalTradeNum = count($totalArrayMerge);
// 总提现用户(以用户id 分组查询数量)
$totalWithdrawalNum = Db::table($userWithdrawTableName)->group('user_id')->count();
// 总充值金额 充值完成
$totalRechargeAmount = Db::table($rechargeApplyTableName)->where('status', 1)->sum('recharge_num');
// 总提款金额 提款完成
$totalWithdrawAmount = Db::table($userWithdrawTableName)->where('status', 2)->sum('apply_num');
// 今日注册用户
$today = date('Y-m-d'); // 今天凌晨
$tomorrow = date('Y-m-d', strtotime('tomorrow')); // 明天凌晨
$todayRegisterNum = Db::table($userTableName)->whereTime('create_time', 'between', [$today, $tomorrow])->count();
// 今日充值用户 完成状态
$todayRechargeNum = Db::table($userTableName)->where('status', 1)
->whereTime('create_time', 'between', [$today, $tomorrow])
->group('user_id')->count();
// 今日交易用户
// 合约
$todayContractTradeUserId = Db::table($ContractTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
//股票
$todayStockTradeUserId = Db::table($stockTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
$todayStockMysTradeUserId = Db::table($stockMysTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
$todayStockThaTradeUserId = Db::table($stockThaTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
$todayStockIndTradeUserId = Db::table($stockIdnTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
$todayStockInTradeUserId = Db::table($stockInTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
// 现货
$todayDigitalTradeUserId = Db::table($digitalTradeTableName)->where('status', 'in', [1, 3])
->whereTime('create_time', 'between', [$today, $tomorrow])
->distinct(true)->column('user_id');
// 计算总数
$todayArrayMerge = array_unique(array_merge($todayStockInTradeUserId, $todayContractTradeUserId, $todayStockTradeUserId, $todayDigitalTradeUserId, $todayStockMysTradeUserId, $todayStockThaTradeUserId, $todayStockIndTradeUserId));
$todayTradeNum = count($todayArrayMerge);
// 今日提款用户
$todayWithdrawNum = Db::table($userWithdrawTableName)
->whereTime('create_time', 'between', [$today, $tomorrow])
->group('user_id')->count();
// 今日充值金额 完成状态
$todayRechargeAmount = Db::table($rechargeApplyTableName)
->whereTime('create_time', 'between', [$today, $tomorrow])
->where('status', 1)->sum('recharge_num');
// 今日提款金额 完成状态
$todayWithdrawAmount = Db::table($userWithdrawTableName)
->whereTime('create_time', 'between', [$today, $tomorrow])
->where('status', 2)->sum('apply_num');
$data = [
'totalRegisterNum' => $totalRegisterNum, // 总注册人数
'totalRechargeNum' => $totalRechargeNum,// 总充值用户
'totalTradeNum' => $totalTradeNum,// 总交易用户
'totalWithdrawalNum' => $totalWithdrawalNum,// 总提现用户
'totalRechargeAmount' => $totalRechargeAmount,// 总充值金额
'totalWithdrawAmount' => $totalWithdrawAmount, // 总提款金额
'todayRegisterNum' => $todayRegisterNum, // 今日注册用户
'todayRechargeNum' => $todayRechargeNum, // 今日充值用户
'todayTradeNum' => $todayTradeNum, // 今日交易用户
'todayWithdrawNum' => $todayWithdrawNum, // 今日提款用户
'todayRechargeAmount' => $todayRechargeAmount, // 今日充值金额
'todayWithdrawAmount' => $todayWithdrawAmount, // 今日提款金额
];
return json(['code' => '0', 'message' => 'SUCCESS', 'data' => $data]);
} catch (\Exception $exception) {
return json(['code' => '1', 'message' => '系统繁忙']);
}
}
// 缓存美股数据
public function cacheUsStock()
{
try {
$list = StockListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$list_key = "US:STOCK:LIST:" . $stock->stock_code;
$redis->del($list_key);
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 缓存印尼
public function cacheIdnStock()
{
try {
$list = StockIdnListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "IDN:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "IDN:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 缓存马来西亚股票
public function cacheMysStock()
{
try {
$list = StockMysListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "MYS:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "MYS:STOCK:LIST:" . $stock->stock_code;
$redis->del($old_key);
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'numeric_code' => $stock->numeric_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 缓存泰股
public function cacheThaStock()
{
try {
$list = StockThaListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "THA:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "THA:STOCK:LIST:" . $stock->stock_code;
$redis->del($list_key);
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 印度股票
public function cacheInStock()
{
try {
$list = StockInListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "IN:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "IN:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 新加坡股票
public function cacheSgdStock()
{
try {
$list = StockSgdListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "SGD:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "SGD:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 香港股票
public function cacheHkStock()
{
try {
$list = StockHkdListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "HKD:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "HKD:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => 4,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 英国股票
public function cacheGbxStock()
{
try {
$list = StockGBXListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "UK:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "UK:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => 4,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
public function cacheFurStock()
{
try {
$list = StockFurListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "FUR:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "FUR:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => 4,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
public function cacheEurStock()
{
try {
$list = StockEurListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "EUR:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "EUR:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => 4,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
//巴西股票
public function cacheBrlStock()
{
try {
$list = StockBrlListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "BR:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "BR:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => 4,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
public function cacheJpStock()
{
try {
$list = StockJpListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$old_code = $stock->stock_code;
if (strpos($stock->stock_code, ':') !== false) {
$code_arr = explode(":", $stock->stock_code);
$old_code = $code_arr[1] ?? $code_arr[0];
}
$old_key = "JP:STOCK:LIST:" . $old_code;
$redis->del($old_key);
$list_key = "JP:STOCK:LIST:" . $stock->stock_code;
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => 4,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 印度期权
public function cacheInOption()
{
try {
$list = StockOptionInrListModel::where('id', '>', '0')->select();
if (!$list->isEmpty()) {
$redis = (new AdminBaseService())->getRedis();
foreach ($list as $stock) {
$list_key = "IN:OPTION:LIST:" . $stock->stock_code;
$redis->del($list_key);
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'rate' => $stock->rate,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
return json(['msg' => 'SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 缓存股票 大类(数据量较大 有时出现超时)
public function cacheStock()
{
try {
$redis = (new AdminBaseService())->getRedis();
// 缓存美股
$stockList = StockListModel::where('id', '>', '0')->select();
if (!$stockList->isEmpty()) {
foreach ($stockList as $stock) {
$list_key = "US:STOCK:LIST:" . $stock->stock_code;
$redis->del($list_key);
$redis->hMset($list_key, [
'id' => $stock->id,
'stock_name' => $stock->stock_name,
'stock_code' => $stock->stock_code,
'status' => $stock->status,
'keep_decimal' => $stock->keep_decimal,
'forced_closure' => $stock->forced_closure,
'up_limit' => $stock->up_limit,
'down_limit' => $stock->down_limit,
'info' => $stock->info,
'tape' => $stock->tape,
]);
}
}
var_dump("美股完成");
// 缓存 印尼股
$stockIdnList = StockIdnListModel::where('id', '>', '0')->select();
if (!$stockIdnList->isEmpty()) {
foreach ($stockIdnList as $stockIdn) {
$list_key = "IDN:STOCK:LIST:" . $stockIdn->stock_code;
$redis->del($list_key);
$redis->hMset($list_key, [
'id' => $stockIdn->id,
'stock_name' => $stockIdn->stock_name,
'stock_code' => $stockIdn->stock_code,
'status' => $stockIdn->status,
'keep_decimal' => $stockIdn->keep_decimal,
'forced_closure' => $stockIdn->forced_closure,
'up_limit' => $stockIdn->up_limit,
'down_limit' => $stockIdn->down_limit,
'info' => $stockIdn->info,
'tape' => $stockIdn->tape,
]);
}
}
var_dump("印尼股完成");
return json(['msg' => ' 美股 印尼股票 缓存完成 SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
// 缓存现货 合约 返佣配置 等非股票配置
public function cacheRedis()
{
try {
$redis = (new AdminBaseService())->getRedis();
var_dump("开始");
// 缓存现货
$digitalList = DigitalListModel::where('id', '>', '0')->select();
if (!$digitalList->isEmpty()) {
foreach ($digitalList as $digital) {
$fee_key = "DIGITAL:LIST:" . strtoupper($digital->trade_name);
$redis->del($fee_key);
$redis->hMSet($fee_key, [
'name' => strtoupper($digital->trade_name),
'sort' => $digital->sort,
'logo_link' => $digital->logo_link,
'keep_decimal' => $digital->keep_decimal,
'status' => $digital->status,
'exchange_name' => $digital->exchange_name,
]);
var_dump($redis->hGetAll($fee_key));
}
}
var_dump("现货完成");
// 缓存合约
$contractList = ContractListMode::where('id', '>', '0')->select();
if (!$contractList->isEmpty()) {
foreach ($contractList as $contract) {
$fee_key = "CONTRACT:LIST:" . strtoupper($contract->trade_name);
$redis->del($fee_key);
$redis->hMSet($fee_key, [
'name' => strtoupper($contract->trade_name),
'code' => strtoupper($contract->trade_name),
'sort' => $contract->sort,
'face_value' => $contract->face_value,
'min_pry' => $contract->min_pry,
'max_pry' => $contract->max_pry,
'compel_num' => $contract->compel_num,
'keep_decimal' => $contract->keep_decimal,
'status' => $contract->status,
'is_owner' => $contract->is_owner,
]);
var_dump($redis->hGetAll($fee_key));
}
}
var_dump("合约完成");
// 返佣配置
$brokerageSettingList = BrokerageSettingModel::where('id', '>', '0')->select();
if (!$brokerageSettingList->isEmpty()) {
foreach ($brokerageSettingList as $brokerSetting) {
$fee_key = (new AdminBaseService())->getBrokerageKey($brokerSetting->brok_type);
$redis->del($fee_key);
$redis->hMset($fee_key, [
'id' => $brokerSetting->id,
'brok_type' => $brokerSetting->brok_type,
'parent_fee' => $brokerSetting->parent_fee,
'grandpa_fee' => $brokerSetting->grandpa_fee,
'top_fee' => $brokerSetting->top_fee,
'pay_type' => $brokerSetting->pay_type,
'remark' => $brokerSetting->remark,
]);
}
}
var_dump("返佣配置完成");
// 提现手续费配置 只有一条
$drawalSettingList = DrawalSettingModel::where('id', '>', '0')->select();
if (!$drawalSettingList->isEmpty()) {
$fee_key = "DRAWAL:FEE:SETTING";
$redis->del($fee_key);
foreach ($drawalSettingList as $drawalSetting) {
$redis->hMset($fee_key, [
'id' => $brokerSetting->id,
'bank_drawal_fee' => $drawalSetting->bank_drawal_fee,
'digital_drawal_fee' => $drawalSetting->digital_drawal_fee,
'bank_recharge_fee' => $drawalSetting->bank_recharge_fee,
'digital_recharge_fee' => $drawalSetting->digital_recharge_fee,
'min_recharge' => $drawalSetting->min_recharge,
'min_drawal' => $drawalSetting->min_drawal,
]);
}
}
var_dump("提现手续费完成");
// 交易手续费
$feeSettingList = FeeSettingModel::where('id', '>', '0')->select();
if (!$feeSettingList->isEmpty()) {
foreach ($feeSettingList as $feeSetting) {
$fee_key = (new AdminBaseService())->getTradeFeeKey($feeSetting->market_type);
$redis->del($fee_key);
$redis->hMset($fee_key, [
'id' => $feeSetting->id,
'market_type' => $feeSetting->market_type,
'buy_fee' => $feeSetting->buy_fee,
'sale_fee' => $feeSetting->sale_fee,
'pay_type' => $feeSetting->pay_type,
'min_buy_num' => $feeSetting->min_buy_num,
'min_sale_num' => $feeSetting->min_sale_num,
'max_entrust_num' => $feeSetting->max_entrust_num,
'max_hold_num' => $feeSetting->max_hold_num,
]);
}
}
var_dump("交易手续费完成");
// 合约插针缓存
(new AdminBaseService())->initContractHqData();
(new AdminBaseService())->initContractSetting();
var_dump("合约插针完成");
// 股票市场
$stockMarketList = StockMarketModel::where('id', '>', '0')->select();
if (!$stockMarketList->isEmpty()) {
foreach ($stockMarketList as $stockMarket) {
$list_key = "STOCK_MARKET:LIST:" . $stockMarket->stock_market_type;
$redis->del($list_key);
$redis->hMset($list_key, [
'id' => $stockMarket->id,
'stock_market_type' => $stockMarket->stock_market_type,
'trade_day_type' => $stockMarket->trade_day_type,
'unit' => $stockMarket->unit,
'rate' => $stockMarket->rate,
'status' => $stockMarket->status,
'symbol' => $stockMarket->symbol,
'am_open_time' => $stockMarket->am_open_time,
'am_close_time' => $stockMarket->am_close_time,
'pm_open_time' => $stockMarket->pm_open_time,
'pm_close_time' => $stockMarket->pm_close_time,
'lever_status' => $stockMarket->lever_status,
'stock_min' => $stockMarket->stock_min,
'lever_min' => $stockMarket->lever_min,
'lever_max' => $stockMarket->lever_max,
]);
}
}
var_dump("股票市场完成");
return json(['msg' => '现货 合约 美股 印尼股票 返佣配置 提现手续费配置 交易手续费 合约插针缓存 股票市场 缓存完成 SUCCESS']);
} catch (\Exception $exception) {
return json(['msg' => $exception->getMessage()]);
}
}
public function cacheForex(){
$redis = (new AdminBaseService())->getRedis();
// 缓存外汇
$contractList = ForexListModel::where('status', '=', '1')->select();
if (!$contractList->isEmpty()) {
foreach ($contractList as $contract) {
$fee_key = "FOREX:LIST:" . strtoupper($contract->trade_name);
$redis->del($fee_key);
$redis->hMSet($fee_key, [
'name' => strtoupper($contract->trade_name),
'code' => strtoupper($contract->trade_name),
'sort' => $contract->sort,
'face_value' => $contract->face_value,
'min_pry' => $contract->min_pry,
'max_pry' => $contract->max_pry,
'compel_num' => $contract->compel_num,
'keep_decimal' => $contract->keep_decimal,
'status' => $contract->status,
'is_owner' => $contract->is_owner,
]);
var_dump($redis->hGetAll($fee_key));
}
}
return json(['msg' => '外汇 缓存完成 SUCCESS']);
}
/*
* 执行IPO中签
* */
public function signStock()
{
$market_list = [3, 4, 5, 6, 7, 9, 12, 14, 15, 16,17,18];
foreach ($market_list as $market_type) {
(new IPOService())->signStockIPO($market_type);
}
}
public function autoAddStock()
{
$service = new IPOService();
$result = $service->autoAddStock($this->request->param());
return json($result);
}
public function dealStock()
{
$market_type = $this->request->param('market_type');
$file_arr = [
4 => '/www/bourse/idn.xlsx',
5 => '/www/bourse/mys.xlsx',
6 => '/www/bourse/tha.xlsx',
7 => '/www/bourse/in.xlsx',
9 => '/www/bourse/sgd.xlsx',
12 => '/www/bourse/hk.xlsx',
];
if (in_array($market_type, [4, 5, 6, 7, 9, 12])) {
$service = new IPOService();
$redis = $service->getRedis();
$table_obj = $service->getStockModel($market_type);
$tap_list = $service->getStockTape($market_type);
$tape_arr = array_flip($tap_list['tape']);
// 你的Excel文件路径
$filePath = $file_arr[$market_type];
$reader = IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($filePath);
$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow();
$result = [];
for ($row = 1; $row <= $highestRow; $row++) {
$arr['stock_code'] = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
$arr['name'] = $worksheet->getCellByColumnAndRow(2, $row)->getValue();
$arr['country'] = $worksheet->getCellByColumnAndRow(3, $row)->getValue();
$arr['tape'] = $worksheet->getCellByColumnAndRow(4, $row)->getValue();
$arr['old_code'] = $worksheet->getCellByColumnAndRow(5, $row)->getValue();
Db::startTrans();
// 判断股票交易所
$tape = '0';
if (isset($arr['tape']) && in_array($arr['tape'], array_keys($tape_arr))) {
$tape = $tape_arr[$arr['tape']];
}
$new_key = $table_obj['redis_key'] . $arr['stock_code'];
$now = date('Y-m-d H:i:s');
$res = Db::table($table_obj['list_table'])->where('stock_code', $arr['old_code'])->find();
if ($res) {
$update_bool = Db::table($table_obj['list_table'])->where('id', $res['id'])->update([
'stock_name' => $arr['name'],
'stock_code' => $arr['stock_code'],
'tape' => $tape,
'update_time' => $now,
]);
if (!$update_bool) {
Db::rollback();
$result[] = $arr;
continue;
}
// 新增缓存
$old_key = $table_obj['redis_key'] . $arr['old_code'];
$redis->del($old_key);
$redis->hMset($new_key, [
'stock_name' => !empty($arr['name']) ? $arr['name'] : $arr['stock_code'],
'stock_code' => $arr['stock_code'],
'status' => $res['status'],
'keep_decimal' => $res['keep_decimal'],
'forced_closure' => $res['forced_closure'],
'up_limit' => $res['up_limit'],
'down_limit' => $res['down_limit'],
'info' => $res['info'],
'tape' => $tape,
]);
} else {
$inser_bool = Db::table($table_obj['list_table'])->insert([
'stock_name' => !empty($arr['name']) ? $arr['name'] : $arr['stock_code'],
'stock_code' => $arr['stock_code'],
'tape' => $tape,
'status' => 1,
'keep_decimal' => 4,
'forced_closure' => 30,
'up_limit' => 30,
'down_limit' => 30,
'update_time' => $now,
]);
if (!$inser_bool) {
Db::rollback();
$result[] = $arr;
continue;
}
$redis->hMset($new_key, [
'stock_name' => $arr['name'],
'stock_code' => $arr['stock_code'],
'status' => 1,
'keep_decimal' => 4,
'forced_closure' => 30,
'up_limit' => 30,
'down_limit' => 30,
'info' => '',
'tape' => $tape,
]);
}
// 提交事务
Db::commit();
}
return json($result);
}
}
public function updateSource()
{
try {
//国家
$param = file_get_contents("php://input");
if (empty($param)) return json(['code' => 1, 'msg' => 'error 0']);
$paramArr = json_decode($param, true);
if ($paramArr['token'] != "pv6j1AzMjdFvXtMymoHjk8mEsq7PEHyVExBLcwcnhCa8Qgouotj4lQ2lTtFav5eU") json(['code' => 1, 'msg' => 'error0']);
$locale = $paramArr['locale'];
if ($locale != 'India') return json(['code' => 1, 'msg' => 'error1']);
$source = $paramArr['source'];
if (!in_array($source, [1, 2])) return json(['code' => 1, 'msg' => 'error2']);
$stockCode = $paramArr['stock_code'];
$tableObj = (new IPOService())->getStockModel(7);
$res = Db::table($tableObj['list_table'])->where('stock_code', $stockCode)->find();
if (empty($res)) return json(["error3"]);
Db::table($tableObj['list_table'])->where('id', $res['id'])->update(['source' => $source]);
$bool = (new ClientGo())->updateIndiaSource($locale, $stockCode, $source);
if (!$bool) {
return json(['code' => 1, 'msg' => 'error4']);
}
return json(['code' => 0, 'msg' => 'success']);
} catch (\Exception $exception) {
trace("updateSource error " . $exception->getMessage(), 'error');
return json([$exception->getMessage()]);
}
}
}