|
|
@ -36,6 +36,7 @@ use think\exception\ValidateException; |
|
|
use think\facade\Db; |
|
|
use think\facade\Db; |
|
|
use think\facade\Log; |
|
|
use think\facade\Log; |
|
|
use think\facade\Queue; |
|
|
use think\facade\Queue; |
|
|
|
|
|
use think\facade\Cache; |
|
|
|
|
|
|
|
|
class IPOService extends AdminBaseService |
|
|
class IPOService extends AdminBaseService |
|
|
{ |
|
|
{ |
|
|
@ -647,7 +648,6 @@ class IPOService extends AdminBaseService |
|
|
return $this->toData('1', '无法操作'); |
|
|
return $this->toData('1', '无法操作'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Db::startTrans(); |
|
|
Db::startTrans(); |
|
|
// 修改股票状态 |
|
|
// 修改股票状态 |
|
|
$num = Db::table($table_obj['stock_table'])->where('id', $preInStock['id'])->update([ |
|
|
$num = Db::table($table_obj['stock_table'])->where('id', $preInStock['id'])->update([ |
|
|
@ -662,10 +662,6 @@ class IPOService extends AdminBaseService |
|
|
|
|
|
|
|
|
$tape_list = $this->getStockTape($market_type); |
|
|
$tape_list = $this->getStockTape($market_type); |
|
|
|
|
|
|
|
|
if (Db::table($table_obj['list_table'])->where('stock_code', $preInStock['stock_code'])->find()) { |
|
|
|
|
|
Db::rollback(); |
|
|
|
|
|
return $this->toData('1', '股票列表已存在该股票'); |
|
|
|
|
|
} |
|
|
|
|
|
// 将新股加入股票 |
|
|
// 将新股加入股票 |
|
|
$inStock['stock_name'] = $preInStock['stock_name']; |
|
|
$inStock['stock_name'] = $preInStock['stock_name']; |
|
|
$inStock['stock_code'] = $preInStock['stock_code']; |
|
|
$inStock['stock_code'] = $preInStock['stock_code']; |
|
|
@ -676,14 +672,20 @@ class IPOService extends AdminBaseService |
|
|
$inStock['forced_closure'] = 30; |
|
|
$inStock['forced_closure'] = 30; |
|
|
$inStock['up_limit'] = 30; |
|
|
$inStock['up_limit'] = 30; |
|
|
$inStock['down_limit'] = 30; |
|
|
$inStock['down_limit'] = 30; |
|
|
$inStock['create_time'] = date('Y-m-d H:i:s'); |
|
|
|
|
|
$inStock['update_time'] = date('Y-m-d H:i:s'); |
|
|
$inStock['update_time'] = date('Y-m-d H:i:s'); |
|
|
if ($market_type == 5) $inStock['numeric_code'] = $preInStock['numeric_code']; |
|
|
if ($market_type == 5) $inStock['numeric_code'] = $preInStock['numeric_code']; |
|
|
|
|
|
|
|
|
|
|
|
if (Db::table($table_obj['list_table'])->where('stock_code', $preInStock['stock_code'])->find()) { |
|
|
|
|
|
$bool = Db::table($table_obj['list_table'])->where('stock_code', $preInStock['stock_code'])->update($inStock); |
|
|
|
|
|
} else { |
|
|
|
|
|
$inStock['create_time'] = date('Y-m-d H:i:s'); |
|
|
$bool = Db::table($table_obj['list_table'])->insert($inStock); |
|
|
$bool = Db::table($table_obj['list_table'])->insert($inStock); |
|
|
if (!$bool) { |
|
|
if (!$bool) { |
|
|
Db::rollback(); |
|
|
Db::rollback(); |
|
|
return $this->toData('1', '股票转移失败'); |
|
|
return $this->toData('1', '股票转移失败'); |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 加入缓存 |
|
|
// 加入缓存 |
|
|
$list_key = $table_obj['redis_key'] . $preInStock['stock_code']; |
|
|
$list_key = $table_obj['redis_key'] . $preInStock['stock_code']; |
|
|
@ -785,24 +787,39 @@ class IPOService extends AdminBaseService |
|
|
return $this->toData('1', '市场类型无效'); |
|
|
return $this->toData('1', '市场类型无效'); |
|
|
} |
|
|
} |
|
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
|
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
|
|
return $this->toData('1', '主键 无效'); |
|
|
return $this->toData('1', '主键无效'); |
|
|
} |
|
|
} |
|
|
if (empty($param['type'])) { |
|
|
if (empty($param['type'])) { |
|
|
return $this->toData('1', '缺少参数'); |
|
|
return $this->toData('1', '缺少参数'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ✅【防重复点击】锁键 |
|
|
|
|
|
$lockKey = "repeatNoteGo_lock_{$market_type}_{$param['id']}_{$param['type']}"; |
|
|
|
|
|
if (!Cache::store('redis')->setnx($lockKey, 1)) { |
|
|
|
|
|
return $this->toData('1', '请勿重复操作'); |
|
|
|
|
|
} |
|
|
|
|
|
// 锁自动过期时间 60 秒(你可以根据需求改为 2-10 秒) |
|
|
|
|
|
Cache::store('redis')->expire($lockKey, 60); |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
$tape_list = $this->getStockTape($market_type); |
|
|
$tape_list = $this->getStockTape($market_type); |
|
|
|
|
|
|
|
|
$preInStock = Db::table($table_obj['stock_table'])->where('id', $param['id'])->where('open_status', 2)->where('is_delete', 1)->find(); |
|
|
$preInStock = Db::table($table_obj['stock_table']) |
|
|
|
|
|
->where('id', $param['id']) |
|
|
|
|
|
->where('open_status', 2) |
|
|
|
|
|
->where('is_delete', 1) |
|
|
|
|
|
->find(); |
|
|
|
|
|
|
|
|
if (empty($preInStock)) { |
|
|
if (empty($preInStock)) { |
|
|
return $this->toData('1', '股票未上市'); |
|
|
return $this->toData('1', '股票未上市'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ($preInStock['hq_status'] == 2 && $param['type'] == 'hq') { |
|
|
if ($preInStock['hq_status'] == 2 && $param['type'] == 'hq') { |
|
|
// 给行情发送数据 |
|
|
|
|
|
Queue::push('app\admin\job\SendGo', [ |
|
|
Queue::push('app\admin\job\SendGo', [ |
|
|
'type' => 'hq', |
|
|
'type' => 'hq', |
|
|
'stock_code' => $preInStock['stock_code'], |
|
|
'stock_code' => $preInStock['stock_code'], |
|
|
'stock_name' => $preInStock['stock_name'], |
|
|
'stock_name' => $preInStock['stock_name'], |
|
|
'tape' => $tape_list['tape'][$preInStock['tape']], |
|
|
'tape' => $tape_list['tape'][$preInStock['tape']] ?? '', |
|
|
'price' => $preInStock['price'], |
|
|
'price' => $preInStock['price'], |
|
|
'isReal' => 1, |
|
|
'isReal' => 1, |
|
|
'company_info' => $preInStock['company_info'], |
|
|
'company_info' => $preInStock['company_info'], |
|
|
@ -812,6 +829,7 @@ class IPOService extends AdminBaseService |
|
|
'market_type' => $market_type, |
|
|
'market_type' => $market_type, |
|
|
], 'sendGo'); |
|
|
], 'sendGo'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ($preInStock['trade_status'] == 2 && $param['type'] == 'trade') { |
|
|
if ($preInStock['trade_status'] == 2 && $param['type'] == 'trade') { |
|
|
Queue::push('app\admin\job\SendGo', [ |
|
|
Queue::push('app\admin\job\SendGo', [ |
|
|
'type' => 'trade', |
|
|
'type' => 'trade', |
|
|
@ -821,9 +839,15 @@ class IPOService extends AdminBaseService |
|
|
'source' => 0, |
|
|
'source' => 0, |
|
|
], 'sendGo'); |
|
|
], 'sendGo'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return $this->toData('0', 'SUCCESS'); |
|
|
return $this->toData('0', 'SUCCESS'); |
|
|
|
|
|
} catch (\Throwable $e) { |
|
|
|
|
|
return $this->toData('1', '系统错误:' . $e->getMessage()); |
|
|
|
|
|
} finally { |
|
|
|
|
|
// ✅ 无论成功或异常都释放锁 |
|
|
|
|
|
Cache::store('redis')->del($lockKey); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 处理股票IPO中签 |
|
|
* 处理股票IPO中签 |
|
|
|