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.

348 lines
14 KiB

<?php
namespace app\admin\service\setting;
use app\admin\service\AdminBaseService;
use app\home\service\BaseHomeService;
use app\model\ContractListMode;
use app\model\ContractSettingModel;
use app\model\ContractTradeModel;
use think\facade\Cache;
class ContractService extends AdminBaseService
{
public function index()
{
try {
$list = ContractListMode::order('id', 'desc')->select();
$rows = [];
if(!$list->isEmpty()){
$rows =$list->toArray();
}
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]);
}catch (\Exception $exception){
return $this->toData('1', '系统繁忙', []);
}
}
// 新增
public function add($param)
{
try {
// 交易对名称
if(empty($param['trade_name']) || !is_string($param['trade_name']) || strlen($param['trade_name']) > 100){
return $this->toData('1', '交易对名称无效', []);
}
// 状态
if(!isset($param['status']) || !in_array($param['status'], ['0', '1'])){
return $this->toData('1', '状态无效', []);
}
// 是否自发
if(!isset($param['is_owner']) || !in_array($param['is_owner'], ['0', '1'])){
return $this->toData('1', '是否自发无效', []);
}
// 简介
$info = '';
if(isset($param['info']) && is_string($param['info'])){
$info = $param['info'];
}
// 面值
if(!isset($param['face_value']) || !is_numeric($param['face_value']) || $param['face_value'] != ceil($param['face_value']) || $param['face_value'] <= 0){
return $this->toData('1', '面值无效', []);
}
// 排序
if(!isset($param['sort']) || !is_numeric($param['sort']) || $param['sort'] != ceil($param['sort']) || $param['sort'] < 0){
return $this->toData('1', '排序值无效', []);
}
// 最小杠杆
if(empty($param['min_pry']) || !is_numeric($param['min_pry']) || $param['min_pry'] != ceil($param['min_pry']) || $param['min_pry'] <= 0){
return $this->toData('1', '最小杠杆值无效', []);
}
// 最大杠杆
if(empty($param['max_pry']) || !is_numeric($param['max_pry']) || $param['max_pry'] != ceil($param['max_pry']) || $param['max_pry'] <= 0){
return $this->toData('1', '最大杠杆值无效', []);
}
// 强制平仓比例值
if(empty($param['compel_num']) || !is_numeric($param['compel_num']) || $param['compel_num'] <= 0){
return $this->toData('1', '强制平仓比例值无效', []);
}
// 小数位数
if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] != ceil($param['keep_decimal']) || $param['keep_decimal'] < 0){
return $this->toData('1', '小数位数值无效', []);
}
// 判断名称是否已被添加
$count = ContractListMode::where('trade_name', $param['trade_name'])->count();
if($count > 0){
return $this->toData('1', '合约交易对名称已存在', []);
}
$contract = new ContractListMode;
$contract->trade_name = $param['trade_name'];
$contract->status = $param['status'];
$contract->is_owner = $param['is_owner'];
$contract->info = $info;
$contract->logo_link = '';
$contract->face_value = $param['face_value'];
$contract->sort = $param['sort'];
$contract->min_pry = $param['min_pry'];
$contract->max_pry = $param['max_pry'];
$contract->compel_num = $param['compel_num'];
$contract->keep_decimal = $param['keep_decimal'];
$contract->create_time = date('Y-m-d H:i:s');
$contract->update_time = date('Y-m-d H:i:s');
$contract->save();
$list_key="CONTRACT:LIST:".strtoupper($param['trade_name']);
$redis = $this->getRedis();
$redis->del($list_key);
$redis->hMset($list_key, [
'name'=>strtoupper($param['trade_name']),
'code'=>strtoupper($param['trade_name']),
'sort'=>$param['sort'],
'face_value'=>$param['face_value'],
'min_pry'=>$param['min_pry'],
'max_pry'=>$param['max_pry'],
'compel_num'=>$param['compel_num'],
'keep_decimal'=>$param['keep_decimal'],
'is_owner'=>$param['is_owner'],
'status'=>$param['status']
]);
return $this->toData('0', '操作成功', []);
}catch (\Exception $exception){
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
}
}
public function edit($param)
{
try {
if(empty($param['id']) || !is_numeric($param['id'])){
return $this->toData('1', '目标不存在', []);
}
$contract = ContractListMode::where('id', $param['id'])->find();
$beforeStatus = $contract['status'];
if(empty($contract)){
return $this->toData('1', '目标不存在', []);
}
// 交易对名称
if(empty($param['trade_name']) || !is_string($param['trade_name']) || strlen($param['trade_name']) > 100){
return $this->toData('1', '交易对名称无效', []);
}
// 状态
if(!isset($param['status']) || !in_array($param['status'], ['0', '1'])){
return $this->toData('1', '状态无效', []);
}
// 是否自发
if(!isset($param['is_owner']) || !in_array($param['is_owner'], ['0', '1'])){
return $this->toData('1', '是否自发无效', []);
}
// 简介
$info = '';
if(isset($param['info']) && is_string($param['info'])){
$info = $param['info'];
}
// 面值
if(!isset($param['face_value']) || !is_numeric($param['face_value']) || $param['face_value'] != ceil($param['face_value']) || $param['face_value'] <= 0){
return $this->toData('1', '面值无效', []);
}
// 排序
if(!isset($param['sort']) || !is_numeric($param['sort']) || $param['sort'] != ceil($param['sort']) || $param['sort'] < 0){
return $this->toData('1', '排序值无效', []);
}
// 最小杠杆
if(empty($param['min_pry']) || !is_numeric($param['min_pry']) || $param['min_pry'] != ceil($param['min_pry']) || $param['min_pry'] <= 0){
return $this->toData('1', '最小杠杆值无效', []);
}
// 最大杠杆
if(empty($param['max_pry']) || !is_numeric($param['max_pry']) || $param['max_pry'] != ceil($param['max_pry']) || $param['max_pry'] <= 0){
return $this->toData('1', '最大杠杆值无效', []);
}
// 强制平仓比例值
if(empty($param['compel_num']) || !is_numeric($param['compel_num']) || $param['compel_num'] <= 0){
return $this->toData('1', '强制平仓比例值无效', []);
}
// 小数位数
if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] != ceil($param['keep_decimal']) || $param['keep_decimal'] < 0){
return $this->toData('1', '小数位数值无效', []);
}
// 判断名称是否已被添加
$count = ContractListMode::where('trade_name', $param['trade_name'])->where('id', '<>', $param['id'])->count();
if($count > 0){
return $this->toData('1', '合约交易对名称已存在', []);
}
// 如果状态设置成关闭 则判断是否有正在交易的合约
if($beforeStatus == 1 && $param['status'] == 0){
$num=(new ContractTradeModel())->where([
'contract_id'=>strtoupper($contract['trade_name']),
'status'=>1
])->count();
if ($num != 0) {
return $this->toData('1', '交易对还存在交易,不能关闭', []);
}
}
// 写入数据
$contract->trade_name = $param['trade_name'];
$contract->status = $param['status'];
$contract->is_owner = $param['is_owner'];
$contract->info = $info;
$contract->logo_link = '';
$contract->face_value = $param['face_value'];
$contract->sort = $param['sort'];
$contract->min_pry = $param['min_pry'];
$contract->max_pry = $param['max_pry'];
$contract->compel_num = $param['compel_num'];
$contract->keep_decimal = $param['keep_decimal'];
$contract->create_time = date('Y-m-d H:i:s');
$contract->update_time = date('Y-m-d H:i:s');
$contract->save();
$list_key="CONTRACT:LIST:".strtoupper($param['trade_name']);
$redis = $this->getRedis();
$redis->del($list_key);
$redis->hMset($list_key, [
'name'=>strtoupper($param['trade_name']),
'code'=>strtoupper($param['trade_name']),
'sort'=>$param['sort'],
'face_value'=>$param['face_value'],
'min_pry'=>$param['min_pry'],
'max_pry'=>$param['max_pry'],
'compel_num'=>$param['compel_num'],
'keep_decimal'=>$param['keep_decimal'],
'status'=>$param['status']
]);
return $this->toData('0', 'SUCCESS', []);
}catch (\Exception $exception){
return $this->toData('1', '系统繁忙', []);
}
}
// 获取合约交易对
public function getTradeNameList($param)
{
try {
if(isset($param['is_owner']) && in_array($param['is_owner'], [0,1])){
$list = ContractListMode::where('status', 1)->order('id', 'desc')
->where('is_owner', $param['is_owner'])
->column('trade_name', 'id');
} else {
$list = ContractListMode::where('status', 1)->order('id', 'desc')
->column('trade_name', 'id');
}
return $this->toData('0', 'SUCCESS', ['list' => $list]);
}catch (\Exception $exception){
return $this->toData('1', '系统繁忙', []);
}
}
public function setting($param)
{
try {
$list = ContractSettingModel::order('time_step', 'asc')->select();
$rows = [];
if(!$list->isEmpty()){
$rows =$list->toArray();
}
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]);
}catch (\Exception $exception){
return $this->toData('1', '系统繁忙', []);
}
}
public function set_add($param)
{
// 状态
if(!isset($param['time_step'])){
return $this->toData('1', '时间无效', []);
}
// 是否自发
if(!isset($param['earnings_num'])){
return $this->toData('1', '收益无效', []);
}
$contract = ContractSettingModel::where('time_step', $param['time_step'])->find();
if(!empty($contract)){
return $this->toData('1', '时间已存在', []);
}
$contract = new ContractSettingModel;
// 写入数据
$contract->time_step = $param['time_step'];
$contract->earnings_num = $param['earnings_num'];
$contract->create_time = date('Y-m-d H:i:s');
$contract->update_time = date('Y-m-d H:i:s');
$contract->save();
$this->initContractSetting();
return $this->toData('0', 'SUCCESS', []);
}
public function set_edit($param)
{
// 状态
if(!isset($param['time_step'])){
return $this->toData('1', '时间无效', []);
}
// 是否自发
if(!isset($param['earnings_num'])){
return $this->toData('1', '收益无效', []);
}
// 是否自发
if(!isset($param['id'])){
return $this->toData('1', 'ID无效', []);
}
$contract = ContractSettingModel::where('id', $param['id'])->find();
if(empty($contract)){
return $this->toData('1', '目标不存在', []);
}
// 写入数据
$contract->time_step = $param['time_step'];
$contract->earnings_num = $param['earnings_num'];
$contract->create_time = date('Y-m-d H:i:s');
$contract->update_time = date('Y-m-d H:i:s');
$contract->save();
$this->initContractSetting();
return $this->toData('0', 'SUCCESS', []);
}
public function set_del($param)
{
if(!isset($param['id'])){
return $this->toData('1', 'ID无效', []);
}
$contract = ContractSettingModel::where('id', $param['id'])->find();
if(empty($contract)){
return $this->toData('1', '目标不存在', []);
}
$contract->where('id',$param['id'])->delete();
$this->initContractSetting();
return $this->toData('0', 'SUCCESS', []);
}
}