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
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', []);
|
|
|
|
}
|
|
}
|