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.

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