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.
227 lines
9.1 KiB
227 lines
9.1 KiB
<?php
|
|
|
|
namespace app\admin\service\setting;
|
|
|
|
use app\admin\service\AdminBaseService;
|
|
use app\model\StockMarketModel;
|
|
use app\model\StockPricesSettingModel;
|
|
|
|
class StockPriceSettingService extends AdminBaseService
|
|
{
|
|
|
|
// 列表
|
|
public function index($param)
|
|
{
|
|
try {
|
|
if (empty($param['page']) || !is_numeric($param['page']) || ceil($param['page']) != $param['page'] || $param['page'] <= 0) {
|
|
return $this->toData('1', '分页参数无效', []);
|
|
}
|
|
|
|
if (empty($param['limit']) || !is_numeric($param['limit']) || ceil($param['limit']) != $param['limit'] || $param['limit'] <= 0) {
|
|
return $this->toData('1', '分页参数无效', []);
|
|
}
|
|
|
|
$list = StockPricesSettingModel::order('id', 'desc')->page($param['page'], $param['limit'])->select();
|
|
$total = StockPricesSettingModel::where('id', '>', 0)->count();
|
|
|
|
|
|
$rows = [];
|
|
// 股票市场货币符号
|
|
$marketSymbol = StockMarketModel::where('id', '>', 0)->column('symbol', 'stock_market_type');
|
|
if (!$list->isEmpty()) {
|
|
$rows = $list->toArray();
|
|
foreach ($list as $key => $item) {
|
|
$stock = (new StockMarketService)->searchStockById(['market_type' => $item->market_type, 'stock_id' => $item->stock_id]);
|
|
$rows[$key]['stock_code'] = $stock['stock_code'] ?? '-';
|
|
$rows[$key]['stock_name'] = $stock['stock_name'] ?? '-';
|
|
$rows[$key]['symbol'] = $marketSymbol[$item->market_type] ?? '-';
|
|
$rows[$key]['price'] = rtrim(rtrim($item['price'], '0'), '.');
|
|
}
|
|
}
|
|
|
|
|
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extent' => [
|
|
'market_type_list' => StockMarketModel::STOCK_MARKET_TYPE,
|
|
'market_symbol' => $marketSymbol
|
|
]]);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
|
|
}
|
|
}
|
|
|
|
// 新增
|
|
public function add($param)
|
|
{
|
|
try {
|
|
$marketTypeList = StockMarketModel::STOCK_MARKET_TYPE;
|
|
// 股票市场
|
|
if (empty($param['market_type']) || !in_array($param['market_type'], array_keys($marketTypeList))) {
|
|
return $this->toData('1', '市场类型无效', []);
|
|
}
|
|
|
|
// 股票主键
|
|
if (empty($param['stock_id']) || !is_numeric($param['stock_id'])) {
|
|
return $this->toData('1', '股票无效', []);
|
|
}
|
|
|
|
$stock = (new StockMarketService)->searchStockById(['market_type' => $param['market_type'], 'stock_id' => $param['stock_id']]);
|
|
if (empty($stock)) {
|
|
return $this->toData('1', '股票无效', []);
|
|
}
|
|
|
|
// 盘前状态
|
|
if (empty($param['status']) || !in_array($param['status'], [StockPricesSettingModel::STATUS_ON, StockPricesSettingModel::STATUS_OFF])) {
|
|
return $this->toData('1', '状态无效', []);
|
|
}
|
|
|
|
if (empty($param['price']) || !is_numeric($param['price'])) {
|
|
return $this->toData('1', '价格无效', []);
|
|
}
|
|
|
|
// 判断市场是否已经存在
|
|
$count = StockPricesSettingModel::where('market_type', $param['market_type'])->where('stock_id', $param['stock_id'])->count();
|
|
if ($count > 0) {
|
|
return $this->toData('1', '已存在相同配置', []);
|
|
}
|
|
|
|
// 添加缓存
|
|
$key = 'STOCK_PRICES:' . $param['market_type'] . ':' . $stock['stock_code'];
|
|
$redis = $this->getRedis();
|
|
$redis->del($key);
|
|
$bool = $redis->hMSet($key, [
|
|
'market_type' => $param['market_type'],
|
|
'stock_id' => $param['stock_id'],
|
|
'stock_code' => $stock['stock_code'],
|
|
'status' => $param['status'],
|
|
'price' => $param['price'],
|
|
]);
|
|
|
|
if ($bool) {
|
|
$stockPriceSetting = new StockPricesSettingModel;
|
|
$stockPriceSetting->market_type = $param['market_type'];
|
|
$stockPriceSetting->stock_id = $param['stock_id'];
|
|
$stockPriceSetting->status = $param['status'];
|
|
$stockPriceSetting->price = $param['price'];
|
|
$stockPriceSetting->create_time = date('Y-m-d H:i:s');
|
|
$stockPriceSetting->update_time = date('Y-m-d H:i:s');
|
|
$stockPriceSetting->save();
|
|
}
|
|
|
|
return $this->toData('0', 'SUCCESS', []);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
|
|
}
|
|
}
|
|
|
|
// 编辑
|
|
public function edit($param)
|
|
{
|
|
try {
|
|
$marketTypeList = StockMarketModel::STOCK_MARKET_TYPE;
|
|
// 目标
|
|
if (empty($param['id']) || !is_numeric($param['id'])) {
|
|
return $this->toData('1', '目标不存在', []);
|
|
}
|
|
|
|
$stockPriceSetting = StockPricesSettingModel::where('id', $param['id'])->find();
|
|
if (empty($stockPriceSetting)) {
|
|
return $this->toData('1', '目标不存在', []);
|
|
}
|
|
|
|
// 股票市场
|
|
if (empty($param['market_type']) || !in_array($param['market_type'], array_keys($marketTypeList))) {
|
|
return $this->toData('1', '市场类型无效', []);
|
|
}
|
|
|
|
// 股票主键
|
|
if (empty($param['stock_id']) || !is_numeric($param['stock_id'])) {
|
|
return $this->toData('1', '股票无效', []);
|
|
}
|
|
|
|
$stock = (new StockMarketService)->searchStockById(['market_type' => $param['market_type'], 'stock_id' => $param['stock_id']]);
|
|
if (empty($stock)) {
|
|
return $this->toData('1', '股票无效', []);
|
|
}
|
|
|
|
// 盘前状态
|
|
if (empty($param['status']) || !in_array($param['status'], [StockPricesSettingModel::STATUS_ON, StockPricesSettingModel::STATUS_OFF])) {
|
|
return $this->toData('1', '盘前状态无效', []);
|
|
}
|
|
|
|
if (empty($param['price']) || !is_numeric($param['price'])) {
|
|
return $this->toData('1', '价格无效', []);
|
|
}
|
|
|
|
// 判断市场是否已经存在
|
|
$count = StockPricesSettingModel::where('market_type', $param['market_type'])->where('stock_id', $param['stock_id'])
|
|
->where('id', '<>', $param['id'])
|
|
->count();
|
|
|
|
if ($count > 0) {
|
|
return $this->toData('1', '已存在相同配置', []);
|
|
}
|
|
|
|
// 添加缓存
|
|
$key = 'STOCK_PRICES:' . $param['market_type'] . ':' . $stock['stock_code'];
|
|
$redis = $this->getRedis();
|
|
$redis->del($key);
|
|
$bool = $redis->hMSet($key, [
|
|
'market_type' => $param['market_type'],
|
|
'stock_id' => $param['stock_id'],
|
|
'stock_code' => $stock['stock_code'],
|
|
'status' => $param['status'],
|
|
'price' => $param['price'],
|
|
]);
|
|
|
|
if ($bool) {
|
|
$stockPriceSetting->market_type = $param['market_type'];
|
|
$stockPriceSetting->stock_id = $param['stock_id'];
|
|
$stockPriceSetting->status = $param['status'];
|
|
$stockPriceSetting->price = $param['price'];
|
|
$stockPriceSetting->update_time = date('Y-m-d H:i:s');
|
|
$stockPriceSetting->save();
|
|
}
|
|
|
|
return $this->toData('0', 'SUCCESS', [$stockPriceSetting->price]);
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
|
|
}
|
|
}
|
|
|
|
// 删除
|
|
public function del($param)
|
|
{
|
|
try {
|
|
// 目标
|
|
if (empty($param['id']) || !is_numeric($param['id'])) {
|
|
return $this->toData('1', '目标不存在', []);
|
|
}
|
|
|
|
$stockPriceSetting = StockPricesSettingModel::where('id', $param['id'])->find();
|
|
if (empty($stockPriceSetting)) {
|
|
return $this->toData('1', '目标不存在', []);
|
|
}
|
|
|
|
if ($stockPriceSetting->status == StockPricesSettingModel::STATUS_ON) {
|
|
return $this->toData('1', '配置开启中 不可删除', []);
|
|
}
|
|
|
|
$stock = (new StockMarketService)->searchStockById(['market_type' => $stockPriceSetting->market_type, 'stock_id' => $stockPriceSetting->stock_id]);
|
|
if (empty($stock)) {
|
|
return $this->toData('1', '股票无效', []);
|
|
}
|
|
|
|
$key = 'STOCK_PRICES:' . $stockPriceSetting->market_type . ':' . $stock['stock_code'];
|
|
$redis = $this->getRedis();
|
|
$num = $redis->del($key);
|
|
if ($num > 0) {
|
|
$stockPriceSetting->delete();
|
|
}
|
|
|
|
return $this->toData('0', 'SUCCESS');
|
|
} catch (\Exception $exception) {
|
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
|
|
}
|
|
}
|
|
|
|
}
|