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
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()]);
|
|
}
|
|
}
|
|
|
|
}
|