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.
327 lines
13 KiB
327 lines
13 KiB
<?php
|
|
|
|
namespace app\admin\service\setting;
|
|
|
|
use app\admin\service\AdminBaseService;
|
|
use app\admin\validate\setting\StockValidate;
|
|
use app\model\StockOptionInrListModel;
|
|
use think\exception\ValidateException;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
// 印度期权
|
|
class OptionInService extends AdminBaseService
|
|
{
|
|
|
|
public function index($param)
|
|
{
|
|
try {
|
|
validate(StockValidate::class)->scene('in_option_index')->check($param);
|
|
|
|
$stockCode = $param['stock_code'] ?? '';
|
|
$where = [];
|
|
if ($stockCode) {
|
|
$where[] = ['stock_code', '=', $stockCode];
|
|
}
|
|
$list = StockOptionInrListModel::where($where)->page($param['page'], $param['limit'])->append(['tape_text', 'status_text'])->order('id', 'desc')->select();
|
|
$total = StockOptionInrListModel::order('id', 'desc')->where($where)->count();
|
|
$rows = [];
|
|
if (!$list->isEmpty()) {
|
|
$rows = $list->toArray();
|
|
}
|
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [
|
|
'tape_list' => StockOptionInrListModel::$tapeListText,
|
|
'status_list' => StockOptionInrListModel::$statusList
|
|
]]);
|
|
} catch (ValidateException $validateException) {
|
|
// 参数校验失败
|
|
$message = $validateException->getError();
|
|
return $this->toData('1', $message);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', []);
|
|
}
|
|
}
|
|
|
|
public function add($param)
|
|
{
|
|
try {
|
|
validate(StockValidate::class)->scene('in_option_add')->check($param);
|
|
$info = '';
|
|
if (isset($param['info']) && is_string($param['info'])) {
|
|
$info = $param['info'];
|
|
}
|
|
|
|
// 判断股票交易所
|
|
$tape = '0';
|
|
if (isset($param['tape']) && in_array($param['tape'], array_keys(StockOptionInrListModel::$tapeList))) {
|
|
$tape = $param['tape'];
|
|
}
|
|
|
|
// 判断股票代码是否已经存在
|
|
$count = StockOptionInrListModel::where('stock_code', $param['stock_code'])->count();
|
|
if ($count > 0) {
|
|
return $this->toData('1', '股票代码已经存在');
|
|
}
|
|
|
|
// 新增数据
|
|
$stockList = new StockOptionInrListModel;
|
|
$stockList->stock_name = $param['stock_name'];
|
|
$stockList->stock_code = $param['stock_code'];
|
|
$stockList->status = $param['status'];
|
|
$stockList->rate = $param['rate'] ?? 0;
|
|
$stockList->keep_decimal = $param['keep_decimal'] ?? 4;
|
|
$stockList->forced_closure = $param['forced_closure'] ?? 30;
|
|
$stockList->up_limit = $param['up_limit'] ?? 30;
|
|
$stockList->down_limit = $param['down_limit'] ?? 30;
|
|
$stockList->info = $info;
|
|
$stockList->tape = $tape;
|
|
$stockList->create_time = date('Y-m-d H:i:s');
|
|
$stockList->update_time = date('Y-m-d H:i:s');
|
|
$stockList->save();
|
|
|
|
// 新增缓存
|
|
$list_key = "IN:OPTION:LIST:" . $param['stock_code'];
|
|
$redis = $this->getRedis();
|
|
$redis->del($list_key);
|
|
$redis->hMset($list_key, [
|
|
'stock_name' => $param['stock_name'],
|
|
'stock_code' => $param['stock_code'],
|
|
'status' => $param['status'],
|
|
'keep_decimal' => $param['keep_decimal'] ?? 4,
|
|
'forced_closure' => $param['forced_closure'] ?? 30,
|
|
'up_limit' => $param['up_limit'] ?? 30,
|
|
'down_limit' => $param['down_limit'] ?? 30,
|
|
'rate' => $param['rate'] ?? 0,
|
|
'info' => $info,
|
|
'tape' => $tape,
|
|
]);
|
|
|
|
// 给行情推送
|
|
// $bool = $this->sendDecimalToGo('Indonesia', $stockList->stock_code, $stockList->keep_decimal);
|
|
// $bool = $this->sendNewStockToGo('India', $stockList->stock_code, $stockList->stock_name, StockOptionInrListModel::$tapeList[$tape]);
|
|
|
|
// if (!$bool) {
|
|
// return $this->toData('1', '数据设置成功 但给行情推送数据异常', []);
|
|
// }
|
|
|
|
return $this->toData('0', 'SUCCESS', []);
|
|
|
|
} catch (ValidateException $validateException) {
|
|
$message = $validateException->getError();
|
|
return $this->toData('1', $message);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', []);
|
|
}
|
|
}
|
|
|
|
|
|
public function edit($param)
|
|
{
|
|
try {
|
|
validate(StockValidate::class)->scene('in_option_edit')->check($param);
|
|
|
|
$stockList = StockOptionInrListModel::where('id', $param['id'])->find();
|
|
if (empty($stockList)) {
|
|
return $this->toData('1', '目标不存在', []);
|
|
}
|
|
|
|
$info = '';
|
|
if (isset($param['info']) && is_string($param['info'])) {
|
|
$info = $param['info'];
|
|
}
|
|
|
|
// 判断股票交易所
|
|
$tape = '0';
|
|
if (isset($param['tape']) && in_array($param['tape'], array_keys(StockOptionInrListModel::$tapeList))) {
|
|
$tape = $param['tape'];
|
|
}
|
|
|
|
// 判断股票代码是否已经存在
|
|
$count = StockOptionInrListModel::where('stock_code', $param['stock_code'])->where('id', '<>', $param['id'])->count();
|
|
if ($count > 0) {
|
|
return $this->toData('1', '股票代码已经存在');
|
|
}
|
|
|
|
// 修改数据
|
|
$stockList->stock_name = $param['stock_name'];
|
|
$stockList->stock_code = $param['stock_code'];
|
|
$stockList->status = $param['status'];
|
|
$stockList->rate = $param['rate'] ?? 0;
|
|
$stockList->keep_decimal = $param['keep_decimal'] ?? 4;
|
|
$stockList->forced_closure = $param['forced_closure'] ?? 30;
|
|
$stockList->up_limit = $param['up_limit'] ?? 30;
|
|
$stockList->down_limit = $param['down_limit'] ?? 30;
|
|
$stockList->info = $info;
|
|
$stockList->tape = $tape;
|
|
$stockList->update_time = date('Y-m-d H:i:s');
|
|
$stockList->save();
|
|
|
|
// 新增缓存
|
|
$list_key = "IN:OPTION:LIST:" . $param['stock_code'];
|
|
$redis = $this->getRedis();
|
|
$redis->del($list_key);
|
|
$redis->hMset($list_key, [
|
|
'stock_name' => $param['stock_name'],
|
|
'stock_code' => $param['stock_code'],
|
|
'status' => $param['status'],
|
|
'keep_decimal' => $param['keep_decimal'] ?? 4,
|
|
'forced_closure' => $param['forced_closure'] ?? 30,
|
|
'up_limit' => $param['up_limit'] ?? 30,
|
|
'down_limit' => $param['down_limit'] ?? 30,
|
|
'rate' => $param['rate'] ?? 0,
|
|
'info' => $info,
|
|
'tape' => $tape,
|
|
]);
|
|
|
|
// 给行情推送
|
|
// $bool = $this->sendNewStockToGo('India', $stockList->stock_code, $stockList->stock_name, StockOptionInrListModel::$tapeList[$tape]);
|
|
//
|
|
// if (!$bool) {
|
|
// return $this->toData('1', '数据设置成功 但给行情推送数据异常', []);
|
|
// }
|
|
|
|
return $this->toData('0', 'SUCCESS', []);
|
|
|
|
} catch (ValidateException $validateException) {
|
|
$message = $validateException->getError();
|
|
return $this->toData('1', $message);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', []);
|
|
}
|
|
}
|
|
|
|
// 列表
|
|
public function getTradeNameList()
|
|
{
|
|
try {
|
|
$list = StockOptionInrListModel::where('status', 1)->order('id', 'desc')->column('stock_name', 'id');
|
|
return $this->toData('0', 'SUCCESS', ['list' => $list]);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', []);
|
|
}
|
|
}
|
|
|
|
public function refresh()
|
|
{
|
|
try {
|
|
|
|
$ch = curl_init();
|
|
|
|
$url = env('OPTION_REFRESH.OPTION_REFRESH_IN_URL');
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url); // Set the URL
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the response as a string
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow any redirects
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // This should be set to true in production, disables SSL certificate verification (only for testing)
|
|
|
|
$response = curl_exec($ch);
|
|
if (curl_errno($ch)) {
|
|
echo 'Curl error: ' . curl_error($ch);
|
|
}
|
|
|
|
curl_close($ch);
|
|
|
|
$data = json_decode($response, true);
|
|
if (empty($data) || empty($data['data']) || empty($data['code']) || (!empty($data['code']) && $data['code'] != 200)) {
|
|
return;
|
|
}
|
|
|
|
$now = date('Y-m-d H:i:s'); // 订单时间
|
|
$insertArr = [];
|
|
$responseCodeArr = array_column($data['data'], 'Code');
|
|
$dataCodeArr = StockOptionInrListModel::column('stock_code');
|
|
$result = array_diff($responseCodeArr, $dataCodeArr);
|
|
foreach ($data['data'] as $v) {
|
|
if (in_array($v['Code'], $result)) {
|
|
$insertArr[] = [
|
|
'stock_name' => $v['Code'],
|
|
'stock_code' => $v['Code'],
|
|
'status' => 1,
|
|
'tape' => StockOptionInrListModel::$tapeList[$v['Exchange']] ?? 1,
|
|
'keep_decimal' => 4,
|
|
'create_time' => $now,
|
|
'update_time' => $now,
|
|
'rate' => 30,
|
|
'forced_closure' => 30,
|
|
'up_limit' => 30,
|
|
'down_limit' => 30
|
|
];
|
|
}
|
|
}
|
|
$StockOptionInrListModel = new StockOptionInrListModel();
|
|
$StockOptionInrListModel::insertAll($insertArr);
|
|
|
|
$redis = $this->getRedis();
|
|
foreach ($insertArr as $cacheV) {
|
|
$list_key = "IN:OPTION:LIST:" . $cacheV['stock_code'];
|
|
$redis->del($list_key);
|
|
$redis->hMset($list_key, [
|
|
'stock_name' => $cacheV['stock_name'],
|
|
'stock_code' => $cacheV['stock_code'],
|
|
'status' => $cacheV['status'],
|
|
'keep_decimal' => $cacheV['keep_decimal'],
|
|
'forced_closure' => $cacheV['forced_closure'],
|
|
'up_limit' => $cacheV['up_limit'],
|
|
'down_limit' => $cacheV['down_limit'],
|
|
'rate' => $cacheV['rate'],
|
|
'info' => '',
|
|
'tape' => $cacheV['tape'],
|
|
]);
|
|
}
|
|
|
|
|
|
} catch (\Exception $exception) {
|
|
}
|
|
}
|
|
|
|
public function batchEdit($param)
|
|
{
|
|
try {
|
|
$rate = $param['rate'];
|
|
$keep_decimal = $param['keep_decimal'];
|
|
$forced_closure = $param['forced_closure'];
|
|
$status = $param['status'];
|
|
$updateArr = ['rate' => $rate, 'keep_decimal' => $keep_decimal, 'forced_closure' => $forced_closure, 'status' => $status, 'update_time' => date('Y-m-d H:i:s')];
|
|
StockOptionInrListModel::where(1, '=', 1)->update($updateArr);
|
|
|
|
$dataCodeArr = StockOptionInrListModel::select()->toArray();
|
|
$redis = $this->getRedis();
|
|
foreach ($dataCodeArr as $cacheV) {
|
|
$list_key = "IN:OPTION:LIST:" . $cacheV['stock_code'];
|
|
$redis->del($list_key);
|
|
$redis->hMset($list_key, [
|
|
'stock_name' => $cacheV['stock_name'],
|
|
'stock_code' => $cacheV['stock_code'],
|
|
'status' => $cacheV['status'],
|
|
'keep_decimal' => $cacheV['keep_decimal'],
|
|
'forced_closure' => $cacheV['forced_closure'],
|
|
'up_limit' => $cacheV['up_limit'],
|
|
'down_limit' => $cacheV['down_limit'],
|
|
'rate' => $cacheV['rate'],
|
|
'info' => $cacheV['info'],
|
|
'tape' => $cacheV['tape'],
|
|
]);
|
|
}
|
|
|
|
return $this->toData('0', 'SUCCESS');
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', []);
|
|
}
|
|
}
|
|
|
|
public function onOff($param)
|
|
{
|
|
try {
|
|
$id = $param['id'];
|
|
$stockList = StockOptionInrListModel::where('id', $param['id'])->find();
|
|
if (empty($stockList)) {
|
|
return $this->toData('1', '目标不存在', []);
|
|
}
|
|
$status = $stockList->status == 0 ? 1 : 0;
|
|
$updateArr = ['status' => $status, 'update_time' => date('Y-m-d H:i:s')];
|
|
StockOptionInrListModel::where('id', $id)->update($updateArr);
|
|
return $this->toData('0', 'SUCCESS');
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', []);
|
|
}
|
|
}
|
|
}
|