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.

422 lines
19 KiB

<?php
namespace app\admin\service\setting;
use app\admin\service\AdminBaseService;
use app\model\StockBlockListModel;
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\StockInListModel;
use app\model\StockJpListModel;
use app\model\StockListModel;
use app\model\StockMysListModel;
use app\model\StockSgdListModel;
use app\model\StockThaListModel;
// 大宗交易
class BlockStockService extends AdminBaseService
{
// 列表
public function index($param)
{
try {
if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) {
return $this->toData('1', '分页参数错误');
}
$where = [];
// 未删除
$where[] = [
'is_delete', '=', StockBlockListModel::IS_DELETE_NO
];
// 股票号
if (!empty($param['stock_code']) && is_string($param['stock_code'])) {
$where[] = [
'stock_code', '=', $param['stock_code']
];
}
// 状态
if (!empty($param['status']) && in_array($param['status'], [StockBlockListModel::STATUS_ON, StockBlockListModel::STATUS_OFF])) {
$where[] = [
'status', '=', $param['status']
];
}
$query = StockBlockListModel::where($where);
$totalQuery = StockBlockListModel::where($where);
$list = $query->order('id', 'desc')->page($param['page'], $param['limit'])->select();
$total = $totalQuery->order('id', 'desc')->count();
return $this->toData('0', 'SUCCESS', ['list' => $list, 'total' => $total, 'extend' => [
// 'tape_list' => StockBlockListModel::$tapeList,
'stock_type_list' => StockBlockListModel::$typeList,
]]);
} catch (\Exception $exception) {
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
}
}
// 新增
public function add($param)
{
try {
// 股票代码
if (empty($param['stock_code']) || !is_string($param['stock_code'])) {
return $this->toData('1', '股票代码 无效');
}
// 股票类型
if (empty($param['type']) || !in_array($param['type'], array_keys(StockBlockListModel::$typeList))) {
return $this->toData('1', '股票市场 无效');
}
// 交易所类型
// if(empty($param['tape']) || !in_array($param['tape'], array_keys(StockBlockListModel::$tapeList))){
// return $this->toData('1', '交易所类型 无效');
// }
switch ($param['type']) {
case '3':
$stock = StockListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '4':
$stock = StockIdnListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '5':
$stock = StockMysListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '6':
$stock = StockThaListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '7':
$stock = StockInListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '9':
$stock = StockSgdListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '12':
$stock = StockHkdListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '14':
$stock = StockGBXListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '15':
$stock = StockFurListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '16':
$stock = StockEurListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '17':
$stock = StockBrlListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '18':
$stock = StockJpListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
default:
return $this->toData('1', '股票市场或股票代码 无效');
}
// 发布状态
if (empty($param['status']) || !in_array($param['status'], [StockBlockListModel::STATUS_ON, StockBlockListModel::STATUS_OFF])) {
return $this->toData('1', '发布状态 无效');
}
// 单股价格
if (empty($param['price']) || !is_numeric($param['price']) || $param['price'] <= 0) {
return $this->toData('1', '单股价格 无效');
}
// 最小申购数量
if (empty($param['min']) || !is_numeric($param['min']) || $param['min'] <= 0 || ceil($param['min']) != $param['min']) {
return $this->toData('1', '最小购买股数无效');
}
// 开始认购时间
if (empty($param['start_time']) || !is_string($param['start_time'])) {
return $this->toData('1', '开始认购时间 无效');
}
// 认购结束时间
if (empty($param['end_time']) || !is_string($param['end_time']) || strtotime($param['end_time']) <= strtotime($param['start_time'])) {
return $this->toData('1', '认购结束时间 无效');
}
// 可出售时间时间
if (empty($param['today_add']) || !is_numeric($param['today_add'])) {
return $this->toData('1', 'T+n 无效');
}
// 新增数据
$blockStock = new StockBlockListModel();
$blockStock->stock_code = $param['stock_code'];
$blockStock->stock_name = $param['stock_name'];
$blockStock->type = $param['type'];
$blockStock->tape = $stock->tape;
$blockStock->status = $param['status'];
$blockStock->price = $param['price'];
$blockStock->min = $param['min'];
$blockStock->start_time = $param['start_time'];
$blockStock->end_time = $param['end_time'];
$blockStock->today_add = $param['today_add'];
$blockStock->keep_decimal = $stock->keep_decimal;
$blockStock->info = $param['info'] ?? '';
$blockStock->forced_closure = $stock->forced_closure;
$blockStock->up_limit = $stock->up_limit;;
$blockStock->down_limit = $stock->down_limit;
$blockStock->buy_pwd = isset($param['buy_pwd']) ? trim($param['buy_pwd']) : '' ;
$blockStock->create_time = date('Y-m-d H:i:s');
$blockStock->update_time = date('Y-m-d H:i:s');
$blockStock->save();
// 加入缓存
$list_key = StockBlockListModel::$typeListEn[$param['type']] . ":BLOCK:LIST:" . $param['stock_code'];
$redis = $this->getRedis();
$redis->del($list_key);
$redis->hMset($list_key, [
'stock_name' => $blockStock->stock_name,
'stock_code' => $blockStock->stock_code,
'status' => $blockStock->status,
'keep_decimal' => $blockStock->keep_decimal,
'forced_closure' => $blockStock->forced_closure,
'up_limit' => $blockStock->up_limit,
'down_limit' => $blockStock->down_limit,
'info' => $blockStock->info,
'tape' => $blockStock->tape,
'price' => $blockStock->price,
'min' => $blockStock->min,
'start_time' => $blockStock->start_time,
'end_time' => $blockStock->end_time,
'today_add' => $blockStock->today_add,
'buy_pwd'=>$blockStock->buy_pwd
]);
return $this->toData('0', 'SUCCESS');
} catch (\Exception $exception) {
return $this->toData('0', '系统繁忙', [$exception->getMessage()]);
}
}
// 编辑
public function edit($param)
{
try {
if (empty($param['id']) || !is_numeric($param['id'])) {
return $this->toData('1', '主键 无效');
}
$blockStock = StockBlockListModel::where('id', $param['id'])->where('is_delete', StockBlockListModel::IS_DELETE_NO)->find();
if (empty($blockStock)) {
return $this->toData('1', '主键 无效');
}
// // 已中签或者已上市不支持修改
// if($blockStock->open_status == PreMysStockModel::OPEN_STATUS_HAD || strtotime($blockStock->get_time)<=time()){
// return $this->toData('1', '已中签或已上市 不支持修改');
// }
// 股票代码
if (empty($param['stock_code']) || !is_string($param['stock_code'])) {
return $this->toData('1', '股票代码 无效');
}
// 股票名称
if (empty($param['stock_name']) || !is_string($param['stock_name'])) {
return $this->toData('1', '股票代码 无效');
}
// 股票类型
if (empty($param['type']) || !in_array($param['type'], array_keys(StockBlockListModel::$typeList))) {
return $this->toData('1', '股票市场 无效');
}
switch ($param['type']) {
case '3':
$stock = StockListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '4':
$stock = StockIdnListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '5':
$stock = StockMysListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '6':
$stock = StockThaListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '7':
$stock = StockInListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '9':
$stock = StockSgdListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '12':
$stock = StockHkdListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '14':
$stock = StockGBXListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '15':
$stock = StockFurListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '16':
$stock = StockEurListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '17':
$stock = StockBrlListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
case '18':
$stock = StockJpListModel::where('stock_code', $param['stock_code'])->find();
if (empty($stock)) return $this->toData('1', 'stock_code 无效');
break;
default:
return $this->toData('1', '股票市场或股票代码 无效');
}
// 交易所类型
// if(empty($param['tape']) || !in_array($param['tape'], array_keys(StockBlockListModel::$tapeList))){
// return $this->toData('1', '交易所类型 无效');
// }
// 发布状态
if (empty($param['status']) || !in_array($param['status'], [StockBlockListModel::STATUS_ON, StockBlockListModel::STATUS_OFF])) {
return $this->toData('1', '发布状态 无效');
}
// 单股价格
if (empty($param['price']) || !is_numeric($param['price']) || $param['price'] <= 0) {
return $this->toData('1', '单股价格 无效');
}
// 最小申购数量
if (empty($param['min']) || !is_numeric($param['min']) || $param['min'] <= 0 || ceil($param['min']) != $param['min']) {
return $this->toData('1', '最小购买股数无效');
}
// 开始认购时间
if (empty($param['start_time']) || !is_string($param['start_time'])) {
return $this->toData('1', '开始认购时间 无效');
}
// 认购结束时间
if (empty($param['end_time']) || !is_string($param['end_time']) || strtotime($param['end_time']) <= strtotime($param['start_time'])) {
return $this->toData('1', '认购结束时间 无效');
}
// 可出售时间时间
if (empty($param['today_add']) || !is_numeric($param['today_add'])) {
return $this->toData('1', 'T+n 无效');
}
// 新增数据
$blockStock->stock_code = $param['stock_code'];
$blockStock->stock_name = $param['stock_name'];
$blockStock->type = $param['type'];
$blockStock->tape = $stock->tape;
$blockStock->status = $param['status'];
$blockStock->price = $param['price'];
$blockStock->min = $param['min'];
$blockStock->start_time = $param['start_time'];
$blockStock->end_time = $param['end_time'];
$blockStock->today_add = $param['today_add'];
$blockStock->keep_decimal = $stock->keep_decimal;
$blockStock->info = $param['info'] ?? '';
$blockStock->forced_closure = $stock->forced_closure;
$blockStock->up_limit = $stock->up_limit;;
$blockStock->down_limit = $stock->down_limit;
$blockStock->update_time = date('Y-m-d H:i:s');
$blockStock->buy_pwd = trim($param['buy_pwd']);
$blockStock->save();
// 加入缓存
$list_key = StockBlockListModel::$typeListEn[$param['type']] . ":BLOCK:LIST:" . $param['stock_code'];
$redis = $this->getRedis();
$redis->del($list_key);
$redis->hMset($list_key, [
'stock_name' => $blockStock->stock_name,
'stock_code' => $blockStock->stock_code,
'status' => $blockStock->status,
'keep_decimal' => $blockStock->keep_decimal,
'forced_closure' => $blockStock->forced_closure,
'up_limit' => $blockStock->up_limit,
'down_limit' => $blockStock->down_limit,
'info' => $blockStock->info,
'tape' => $blockStock->tape,
'price' => $blockStock->price,
'min' => $blockStock->min,
'start_time' => $blockStock->start_time,
'end_time' => $blockStock->end_time,
'today_add' => $blockStock->today_add,
'buy_pwd'=>$blockStock->buy_pwd,
]);
return $this->toData('0', 'SUCCESS');
} catch (\Exception $exception) {
return $this->toData('0', '系统繁忙', [$exception->getMessage()]);
}
}
// //删除
// public function del($param)
// {
// try {
// if (empty($param['id']) || !is_numeric($param['id'])) {
// return $this->toData('1', '主键 无效');
// }
//
// $preInStock = StockBlockListModel::where('id', $param['id'])->where('is_delete', StockBlockListModel::IS_DELETE_NO)->find();
// if (empty($preInStock)) {
// return $this->toData('1', '主键 无效');
// }
//
// $orderList = UserMysPreStockOrderModel::where('pre_stock_id', $preInStock->id)->select();
// if (!$orderList->isEmpty()) {
// return $this->toData('1', '已有申购订单不可删除');
// }
//
// // 删除
// $list_key = "MYS:STOCK:LIST:" . $preInStock->stock_code;
// $redis = $this->getRedis();
// $redis->del($list_key);
//
// //删除 修改状态
// $preInStock->is_delete = PreMysStockModel::IS_DELETE_YES;
// $preInStock->save();
// return $this->toData('0', 'SUCCESS');
// } catch (\Exception $exception) {
// return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
// }
// }
}