406 changed files with 50173 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
APP_DEBUG =true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
CROSS_ORIGIN = true
[DATABASE]
TYPE = mysql
HOSTNAME = 35.185.183.202
DATABASE = root
USERNAME = bourse
PASSWORD = ID}#3CZ^D\SXOZ+
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
prefix = bot_
[LANG]
default_lang = zh-cn
[REDIS]
HOST = 10.87.38.3
PORT = 6379
SELECT = 0
PASSWORD = 7d00cb62-1d1c-4c86-b50a-ebf9f00cc9fd
[EMAIL]
# 多个以逗号隔开
DENY_EMAIL_TYPE = 163.com,qq.com,126.com,sina.com,sohu.com.aliyun.com,139.com,189.cn
Host= smtpdm-ap-southeast-1.aliyun.com // sg-smtp.qcloudmail.com
Username=service@reg.twinim.com
Password=rE51XlFpjJeMhLoHooX6
From=service@reg.twinim.com
[NATION]
# 多个以逗号隔开
DENY_NATION = 86,886,852,853
[ENCRYPT]
SALT = #$%^issoeasy%$#$^
ADMINSALT = #1%^issoeasy%$%$^
[SMS]
# 短信秘钥对 可拼接多个 key@secret,key@secret
CONFIG = LTAI5tMYUS9asodB6n2qSL9Y@TIMy9s5m7mHSPZN4uRahok4GRdWH1p
[LOGIN]
PER_IP_REGISTER_NUM_EVERY_DAY = 100
PER_IP_GET_CODE_NUM = 1000
PER_PHONE_GET_CODE_NUM = 5
[USER]
DEFAULT_HEAD_IMG_PATH = /bs/image/default.jpeg
[BACKEND]
BASE_URL=http://testmg.coincosmic.net
[AGENT]
AGENT_GROUP_ID=6
[QUOTE]
BASE_URL=10.148.0.13:88
DEAL_BASE_URL=http://10.148.0.12:8000
[FEATURE]
HAS_TEAM = true
HAS_DIGITAL = true
HAS_CONTRACT = true
HAS_STOCK_US = true
[PAY]
NOTIFY_URL= https://api.sysdev8.cc
[WALLET]
NAME=test
WALLET_TYPE=TRC-20
HTTP_URL=https://wallet.orcoin.net
[QEAE_PAY]
#key
KEY=399fd368dbd84b3fbee7012f20ca0b45
#代付 key
DF_KEY=UQBCGZ3IWBVWUUDXYU8ZDXZ2QOQAC2DN
#商户号
MERCHANT=400029056
[REG_USER]
INVITE_CODE_REQUIRED = 1
[OPTION_REFRESH]
OPTION_REFRESH_IN_URL=https://quotes.sysdev8.cc/option/php/list?country=India |
@ -0,0 +1,5 @@ |
|||||
|
/.idea |
||||
|
/.vscode |
||||
|
/vendor |
||||
|
*.log |
||||
|
.env |
@ -0,0 +1,42 @@ |
|||||
|
sudo: false |
||||
|
|
||||
|
language: php |
||||
|
|
||||
|
branches: |
||||
|
only: |
||||
|
- stable |
||||
|
|
||||
|
cache: |
||||
|
directories: |
||||
|
- $HOME/.composer/cache |
||||
|
|
||||
|
before_install: |
||||
|
- composer self-update |
||||
|
|
||||
|
install: |
||||
|
- composer install --no-dev --no-interaction --ignore-platform-reqs |
||||
|
- zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip . |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-image:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0" |
||||
|
- composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0" |
||||
|
- composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0" |
||||
|
- zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip . |
||||
|
|
||||
|
script: |
||||
|
- php think unit |
||||
|
|
||||
|
deploy: |
||||
|
provider: releases |
||||
|
api_key: |
||||
|
secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw= |
||||
|
file: |
||||
|
- ThinkPHP_Core.zip |
||||
|
- ThinkPHP_Full.zip |
||||
|
skip_cleanup: true |
||||
|
on: |
||||
|
tags: true |
@ -0,0 +1,32 @@ |
|||||
|
|
||||
|
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 |
||||
|
版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) |
||||
|
All rights reserved。 |
||||
|
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 |
||||
|
|
||||
|
Apache Licence是著名的非盈利开源组织Apache采用的协议。 |
||||
|
该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, |
||||
|
允许代码修改,再作为开源或商业软件发布。需要满足 |
||||
|
的条件: |
||||
|
1. 需要给代码的用户一份Apache Licence ; |
||||
|
2. 如果你修改了代码,需要在被修改的文件中说明; |
||||
|
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 |
||||
|
带有原来代码中的协议,商标,专利声明和其他原来作者规 |
||||
|
定需要包含的说明; |
||||
|
4. 如果再发布的产品中包含一个Notice文件,则在Notice文 |
||||
|
件中需要带有本协议内容。你可以在Notice中增加自己的 |
||||
|
许可,但不可以表现为对Apache Licence构成更改。 |
||||
|
具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
|
||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
|
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
|
POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,8 @@ |
|||||
|
<IfModule mod_rewrite.c> |
||||
|
Options +FollowSymlinks -Multiviews |
||||
|
RewriteEngine On |
||||
|
|
||||
|
RewriteCond %{REQUEST_FILENAME} !-d |
||||
|
RewriteCond %{REQUEST_FILENAME} !-f |
||||
|
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] |
||||
|
</IfModule> |
@ -0,0 +1,10 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<title>404</title> |
||||
|
</head> |
||||
|
<body> |
||||
|
宝藏不见了 |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,22 @@ |
|||||
|
<?php |
||||
|
declare (strict_types = 1); |
||||
|
|
||||
|
namespace app; |
||||
|
|
||||
|
use think\Service; |
||||
|
|
||||
|
/** |
||||
|
* 应用服务类 |
||||
|
*/ |
||||
|
class AppService extends Service |
||||
|
{ |
||||
|
public function register() |
||||
|
{ |
||||
|
// 服务注册 |
||||
|
} |
||||
|
|
||||
|
public function boot() |
||||
|
{ |
||||
|
// 服务启动 |
||||
|
} |
||||
|
} |
@ -0,0 +1,94 @@ |
|||||
|
<?php |
||||
|
declare (strict_types = 1); |
||||
|
|
||||
|
namespace app; |
||||
|
|
||||
|
use think\App; |
||||
|
use think\exception\ValidateException; |
||||
|
use think\Validate; |
||||
|
|
||||
|
/** |
||||
|
* 控制器基础类 |
||||
|
*/ |
||||
|
abstract class BaseController |
||||
|
{ |
||||
|
/** |
||||
|
* Request实例 |
||||
|
* @var \think\Request |
||||
|
*/ |
||||
|
protected $request; |
||||
|
|
||||
|
/** |
||||
|
* 应用实例 |
||||
|
* @var \think\App |
||||
|
*/ |
||||
|
protected $app; |
||||
|
|
||||
|
/** |
||||
|
* 是否批量验证 |
||||
|
* @var bool |
||||
|
*/ |
||||
|
protected $batchValidate = false; |
||||
|
|
||||
|
/** |
||||
|
* 控制器中间件 |
||||
|
* @var array |
||||
|
*/ |
||||
|
protected $middleware = []; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @access public |
||||
|
* @param App $app 应用对象 |
||||
|
*/ |
||||
|
public function __construct(App $app) |
||||
|
{ |
||||
|
$this->app = $app; |
||||
|
$this->request = $this->app->request; |
||||
|
|
||||
|
// 控制器初始化 |
||||
|
$this->initialize(); |
||||
|
} |
||||
|
|
||||
|
// 初始化 |
||||
|
protected function initialize() |
||||
|
{} |
||||
|
|
||||
|
/** |
||||
|
* 验证数据 |
||||
|
* @access protected |
||||
|
* @param array $data 数据 |
||||
|
* @param string|array $validate 验证器名或者验证规则数组 |
||||
|
* @param array $message 提示信息 |
||||
|
* @param bool $batch 是否批量验证 |
||||
|
* @return array|string|true |
||||
|
* @throws ValidateException |
||||
|
*/ |
||||
|
protected function validate(array $data, $validate, array $message = [], bool $batch = false) |
||||
|
{ |
||||
|
if (is_array($validate)) { |
||||
|
$v = new Validate(); |
||||
|
$v->rule($validate); |
||||
|
} else { |
||||
|
if (strpos($validate, '.')) { |
||||
|
// 支持场景 |
||||
|
[$validate, $scene] = explode('.', $validate); |
||||
|
} |
||||
|
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate); |
||||
|
$v = new $class(); |
||||
|
if (!empty($scene)) { |
||||
|
$v->scene($scene); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$v->message($message); |
||||
|
|
||||
|
// 是否批量验证 |
||||
|
if ($batch || $this->batchValidate) { |
||||
|
$v->batch(true); |
||||
|
} |
||||
|
|
||||
|
return $v->failException(true)->check($data); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
<?php |
||||
|
namespace app; |
||||
|
|
||||
|
use think\db\exception\DataNotFoundException; |
||||
|
use think\db\exception\ModelNotFoundException; |
||||
|
use think\exception\Handle; |
||||
|
use think\exception\HttpException; |
||||
|
use think\exception\HttpResponseException; |
||||
|
use think\exception\ValidateException; |
||||
|
use think\Response; |
||||
|
use Throwable; |
||||
|
|
||||
|
/** |
||||
|
* 应用异常处理类 |
||||
|
*/ |
||||
|
class ExceptionHandle extends Handle |
||||
|
{ |
||||
|
/** |
||||
|
* 不需要记录信息(日志)的异常类列表 |
||||
|
* @var array |
||||
|
*/ |
||||
|
protected $ignoreReport = [ |
||||
|
HttpException::class, |
||||
|
HttpResponseException::class, |
||||
|
ModelNotFoundException::class, |
||||
|
DataNotFoundException::class, |
||||
|
ValidateException::class, |
||||
|
]; |
||||
|
|
||||
|
/** |
||||
|
* 记录异常信息(包括日志或者其它方式记录) |
||||
|
* |
||||
|
* @access public |
||||
|
* @param Throwable $exception |
||||
|
* @return void |
||||
|
*/ |
||||
|
public function report(Throwable $exception): void |
||||
|
{ |
||||
|
// 使用内置的方式记录异常日志 |
||||
|
parent::report($exception); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Render an exception into an HTTP response. |
||||
|
* |
||||
|
* @access public |
||||
|
* @param \think\Request $request |
||||
|
* @param Throwable $e |
||||
|
* @return Response |
||||
|
*/ |
||||
|
public function render($request, Throwable $e): Response |
||||
|
{ |
||||
|
// 添加自定义异常处理机制 |
||||
|
|
||||
|
// 其他错误交给系统处理 |
||||
|
return parent::render($request, $e); |
||||
|
} |
||||
|
} |
After Width: | Height: | Size: 67 MiB |
Binary file not shown.
@ -0,0 +1,8 @@ |
|||||
|
<?php |
||||
|
namespace app; |
||||
|
|
||||
|
// 应用请求对象类 |
||||
|
class Request extends \think\Request |
||||
|
{ |
||||
|
|
||||
|
} |
@ -0,0 +1,85 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\AdminService; |
||||
|
use think\Request; |
||||
|
|
||||
|
// 用户管理 |
||||
|
class Admin extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function addUser() |
||||
|
{ |
||||
|
$service = new AdminService(); |
||||
|
$result = $service->addUser($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function updateInfo() |
||||
|
{ |
||||
|
$service = new AdminService(); |
||||
|
$result = $service->updateInfo($this->request->user_id,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function getUserInfo() |
||||
|
{ |
||||
|
$service = new AdminService(); |
||||
|
$result = $service->getUserInfo($this->request->user_id); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function updatePassword() |
||||
|
{ |
||||
|
$service = new AdminService(); |
||||
|
$result = $service->updatePassword($this->request->user_id,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
//账号列表 |
||||
|
public function getUserList() |
||||
|
{ |
||||
|
$returnData = (new AdminService())->getUserList($this->request->param()); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
//编辑账号 |
||||
|
public function updateAccount(){ |
||||
|
$returnData = (new AdminService())->updateAccount($this->request->param('id'),$this->request->param()); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
|
||||
|
//更新账号状态 |
||||
|
public function updateAccountStauts(){ |
||||
|
$returnData = (new AdminService())->updateAccountStauts($this->request->param('id'),$this->request->param()); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
|
||||
|
//删除指定用户 |
||||
|
public function del(){ |
||||
|
$returnData = (new AdminService())->del($this->request->param('id')); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
//获取用户权限代码 |
||||
|
public function getPermCode(){ |
||||
|
$returnData = (new AdminService())->getPermCode($this->request->user_id); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
|
||||
|
//退出登陆 |
||||
|
public function logout() |
||||
|
{ |
||||
|
$returnData = (new AdminService())->logout($this->request->user_id); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
|
||||
|
//操作日志 |
||||
|
public function log() |
||||
|
{ |
||||
|
$returnData = (new AdminService())->logList($this->request->param()); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
|
||||
|
public function inviteCode(){ |
||||
|
$returnData = (new AdminService())->inviteCode(); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\BaseController; |
||||
|
|
||||
|
class AdminBaseController extends BaseController |
||||
|
{ |
||||
|
|
||||
|
public function getAdminId() |
||||
|
{ |
||||
|
return $this->request->user_id; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\AgentService; |
||||
|
|
||||
|
class Agent extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 代理列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new AgentService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 代理用户列表 |
||||
|
public function user() |
||||
|
{ |
||||
|
$service = new AgentService(); |
||||
|
$result = $service->user($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 管理用户 |
||||
|
public function manager() |
||||
|
{ |
||||
|
$service = new AgentService(); |
||||
|
$result = $service->manager($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use think\facade\Filesystem; |
||||
|
use app\model\ConfigModel; |
||||
|
|
||||
|
class Config extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function setConfig() |
||||
|
{ |
||||
|
try { |
||||
|
$param = $this->request->param(); |
||||
|
if (empty($param['name'])) return json(['code' => '1', 'message' => '参数错误', 'data' => []]); |
||||
|
$name = $param['name']; |
||||
|
$type = $param['type'] ?? 'string'; |
||||
|
$value = $param['value'] ?? ''; |
||||
|
$tip = $param['tip'] ?? ''; |
||||
|
|
||||
|
$insertData = [ |
||||
|
'name' => $name, |
||||
|
'group' => 'config', |
||||
|
'title' => $name, |
||||
|
'tip' => $tip, |
||||
|
'type' => $type, |
||||
|
'value' => $value, |
||||
|
]; |
||||
|
|
||||
|
$config = ConfigModel::where('name', $name)->find(); |
||||
|
if (empty($config)) { |
||||
|
$bool = ConfigModel::insert($insertData); |
||||
|
if (!$bool) return json(['code' => '100500', 'message' => '设置失败', 'data' => []]); |
||||
|
} else { |
||||
|
$bool = ConfigModel::where('name', $name)->update($insertData); |
||||
|
if (!$bool) return json(['code' => '100500', 'message' => '设置失败', 'data' => []]); |
||||
|
} |
||||
|
|
||||
|
return json(['code' => '0', 'message' => 'Request successful', 'data' => []]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return json(['code' => '100500', 'message' => '系统繁忙', 'data' => [$exception->getMessage()]]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function getConfig() |
||||
|
{ |
||||
|
try { |
||||
|
$param = $this->request->param(); |
||||
|
if (empty($param['name'])) return json(['code' => '1', 'message' => '参数错误', 'data' => []]); |
||||
|
$name = $param['name']; |
||||
|
$value = ConfigModel::where('name', $name)->value('value'); |
||||
|
|
||||
|
return json(['code' => '0', 'message' => 'Request successful', 'data' => ['value' => $value]]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return json(['code' => '100500', 'message' => '系统繁忙', 'data' => [$exception->getMessage()]]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\model\CountryModel; |
||||
|
use think\response\Json; |
||||
|
|
||||
|
class Country extends AdminBaseController |
||||
|
{ |
||||
|
/** |
||||
|
* @desc 获取国家码和地区 |
||||
|
* @return Json |
||||
|
*/ |
||||
|
public function getAll(): Json |
||||
|
{ |
||||
|
try { |
||||
|
$res = CountryModel::getAll(); |
||||
|
$returnData = []; |
||||
|
if(!$res->isEmpty()){ |
||||
|
$deny = explode(',', env('NATION.DENY_NATION')); |
||||
|
foreach ($res as $item) { |
||||
|
$active = 1; |
||||
|
if(in_array($item['code'],$deny )){ |
||||
|
$active = 0; |
||||
|
} |
||||
|
$returnData[] = [ |
||||
|
'id' => $item['id'], |
||||
|
'nameCn' => $item['name_cn'], |
||||
|
'nameEn' => $item['name_en'], |
||||
|
'nation' => $item['code'], |
||||
|
'active' => $active, |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
return json(['code' => '0', 'message' => '请求成功','data' => $returnData]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return json(['code' => '100500', 'message' => '系统繁忙','data' => []]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,93 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\FlowService; |
||||
|
|
||||
|
// 资金管理 流水 |
||||
|
class Flow extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function digital() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->digital($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function stock() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->stock($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function contract() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->contract($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function forex() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->forex($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function transfer() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->transfer($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function fee() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->fee($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function brokerage() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->brokerage($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
################################ 股票资产流水 ##################################### |
||||
|
|
||||
|
// 股票流水 |
||||
|
public function StockLogs() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->StockLogs($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 基金流水 |
||||
|
public function fundStock() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->fundStock($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 印度期权流水 |
||||
|
public function inOptionStock() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->inOptionStock($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 印度期权流水 |
||||
|
public function blockStock() |
||||
|
{ |
||||
|
$service = new FlowService(); |
||||
|
$result = $service->blockStock($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,15 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\LoginService; |
||||
|
use think\Request; |
||||
|
class Login extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function login(Request $request) |
||||
|
{ |
||||
|
$returnData = (new LoginService())->login($this->request->post()); |
||||
|
return json($returnData); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,480 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\OrderService; |
||||
|
|
||||
|
class Order extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
######################################## 现货交易 ####################################### |
||||
|
|
||||
|
// 现货挂单 |
||||
|
public function digitalPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->digitalPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 现货撤单 |
||||
|
public function digitalBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->digitalBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 现货完成 |
||||
|
public function digitalDeal() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->digitalDeal($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
######################################## 外汇交易 ####################################### |
||||
|
|
||||
|
// 合约持仓 |
||||
|
public function forexHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->forexHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约挂单 |
||||
|
public function forexPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->forexPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约撤单 |
||||
|
public function forexBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->forexBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约平仓 |
||||
|
public function forexClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->forexClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
######################################## 合约交易 ####################################### |
||||
|
|
||||
|
// 合约持仓 |
||||
|
public function contractHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约挂单 |
||||
|
public function contractPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约撤单 |
||||
|
public function contractBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约平仓 |
||||
|
public function contractClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
######################################## 秒合约交易 ####################################### |
||||
|
|
||||
|
// 合约持仓 |
||||
|
public function contractSecHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractSecHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约挂单 |
||||
|
public function contractSecPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractSecPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约撤单 |
||||
|
public function contractSecBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractSecBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约平仓 |
||||
|
public function contractSecClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->contractSecClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
########################################## 股票交易-lod ########################################### |
||||
|
|
||||
|
public function stockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->stockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约挂单 |
||||
|
public function stockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->stockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约撤单 |
||||
|
public function stockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->stockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 合约平仓 |
||||
|
public function stockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->stockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
############################################################## 美股订单 |
||||
|
|
||||
|
// 美股持仓 |
||||
|
public function usStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->usStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 美股挂单 |
||||
|
public function usStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->usStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 美股撤单 |
||||
|
public function usStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->usStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 美股平仓 |
||||
|
public function usStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->usStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
############################################################## 印尼股票订单 |
||||
|
public function idnStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->idnStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function idnStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->idnStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function idnStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->idnStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function idnStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->idnStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
############################################################## 马来西亚股票订单 |
||||
|
public function mysStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->mysStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function mysStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->mysStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function mysStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->mysStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function mysStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->mysStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
############################################################## 泰国股票订单 |
||||
|
public function thaStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->thaStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function thaStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->thaStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function thaStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->thaStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function thaStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->thaStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
############################################################## 印度股票订单 |
||||
|
public function inStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function inStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function inStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function inStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
############################################################## 新加坡股票订单 |
||||
|
public function sgdStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->sgdStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function sgdStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->sgdStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function sgdStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->sgdStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function sgdStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->sgdStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
################################################# 申购订单 |
||||
|
public function preStock() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$market_type = intval($this->request->param('market_type')); |
||||
|
$result = $service->preStock($market_type,$this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function updateGetNum() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$market_type = intval($this->request->param('market_type')); |
||||
|
$result = $service->updateGetNum($market_type, $this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function preRefund() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$market_type = intval($this->request->param('market_type')); |
||||
|
$result = $service->preRefund($market_type, $this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
################################################# 基金 |
||||
|
public function fund() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->fundStock($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function fundInfo() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->fundStockInfo($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function fundInterestList() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->fundInterestList($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
################################################# 港股 |
||||
|
public function hkStockHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->hkStockHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function hkStockPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->hkStockPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function hkStockBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->hkStockBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function hkStockClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->hkStockClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
################################################# 印度期权 |
||||
|
public function inOptionHold() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inOptionHold($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function inOptionPlace() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inOptionPlace($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function inOptionBack() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inOptionBack($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function inOptionClear() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->inOptionClear($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function block() |
||||
|
{ |
||||
|
$service = new OrderService(); |
||||
|
$result = $service->blockStock($this->request->param(), $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
// 充值订单 |
||||
|
use app\admin\service\RechargeService; |
||||
|
|
||||
|
class Recharge extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new RechargeService(); |
||||
|
$result = $service->index($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function info() |
||||
|
{ |
||||
|
$service = new RechargeService(); |
||||
|
$result = $service->info($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function check() |
||||
|
{ |
||||
|
$service = new RechargeService(); |
||||
|
$result = $service->check($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
class Test extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
return json(['code' => '0', 'msg' => 'SUCCESS', 'data' => []]); |
||||
|
} |
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\model\FileModel; |
||||
|
use think\facade\Filesystem; |
||||
|
|
||||
|
class Upload extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 上传图片 |
||||
|
public function upload() |
||||
|
{ |
||||
|
try { |
||||
|
// 获取文件 |
||||
|
$file = $this->request->file('file'); |
||||
|
$param = $this->request->param(); |
||||
|
$rootPath = $param['path'] ?? ''; |
||||
|
$filename = $param['name'] ?? ''; |
||||
|
|
||||
|
// 将文件存储在本地 |
||||
|
$name = Filesystem::disk('local')->putFile($rootPath, $file); |
||||
|
$path = '/bs/image/' . $name; |
||||
|
|
||||
|
if (!empty($filename) && file_exists(app()->getRootPath() . 'public' . $path)) { |
||||
|
$newName = app()->getRootPath() . 'public/bs/' . $filename; |
||||
|
copy(app()->getRootPath() . 'public' . $path, $newName); |
||||
|
unlink(app()->getRootPath() . 'public' . $path); |
||||
|
$path = '/bs/' . $filename; |
||||
|
} |
||||
|
|
||||
|
// 返回路径 |
||||
|
return json(['code' => '0', 'message' => '上传成功', 'data' => ['path' => $path]]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return json(['code' => '100500', 'message' => '系统繁忙', 'data' => [$exception->getMessage()]]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,126 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\UserService; |
||||
|
|
||||
|
// 用户管理 |
||||
|
class User extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 用户列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->index($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 用户状态操作 |
||||
|
public function status() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->status($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 用户资金管理 |
||||
|
public function change() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->change($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 用户关系 |
||||
|
public function relation() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->relation($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function reg_phone() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->reg_phone($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function reg_email() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->reg_email($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function verifyDetail() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->verifyDetail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function verifyDo() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->verifyDo($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function leverReview() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->leverReview($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
##################### 查看验证码 |
||||
|
public function getUserCode() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->getUserCode($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getRegCode() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->getRegCode($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function bankDetail() |
||||
|
{ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->bankDetail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function editBank(){ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->editBank($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function editPassword(){ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->editPassword($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function autoLogin(){ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->setAutoLogin($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getLeverageNum(){ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->getLeverageNum($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function editLeverageNum(){ |
||||
|
$service = new UserService(); |
||||
|
$result = $service->editLeverageNum($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,37 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\VoteService; |
||||
|
|
||||
|
class Vote extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new VoteService(); |
||||
|
$result = $service->index($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new VoteService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new VoteService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new VoteService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller; |
||||
|
|
||||
|
use app\admin\service\WithdrawService; |
||||
|
|
||||
|
class Withdraw extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new WithdrawService(); |
||||
|
$result = $service->index($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function info() |
||||
|
{ |
||||
|
$service = new WithdrawService(); |
||||
|
$result = $service->info($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function change_status() |
||||
|
{ |
||||
|
$service = new WithdrawService(); |
||||
|
$result = $service->change_status($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function get_balance() |
||||
|
{ |
||||
|
$service = new WithdrawService(); |
||||
|
$result = $service->get_balance($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function channel_list() |
||||
|
{ |
||||
|
$service = new WithdrawService(); |
||||
|
$result = $service->channel_list($this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\controller\auth; |
||||
|
|
||||
|
use app\admin\service\auth\AuthRoleService; |
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use think\Request; |
||||
|
|
||||
|
// 用户管理 |
||||
|
class AuthRole extends AdminBaseController |
||||
|
{ |
||||
|
//新增 |
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new AuthRoleService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new AuthRoleService(); |
||||
|
$result = $service->edit($this->request->param('id'),$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function list() |
||||
|
{ |
||||
|
$service = new AuthRoleService(); |
||||
|
$result = $service->list($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new AuthRoleService(); |
||||
|
$result = $service->del($this->request->param('id')); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function updateStatus() |
||||
|
{ |
||||
|
$service = new AuthRoleService(); |
||||
|
$result = $service->updateStatus($this->request->param('id'),$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function allList(){ |
||||
|
$service = new AuthRoleService(); |
||||
|
$result = $service->allList($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\controller\auth; |
||||
|
|
||||
|
use app\admin\service\auth\AuthRuleService; |
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
|
||||
|
// 用户管理 |
||||
|
class AuthRule extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
|
||||
|
$service = new AuthRuleService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new AuthRuleService(); |
||||
|
$result = $service->edit($this->request->param('id'),$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function list() |
||||
|
{ |
||||
|
$service = new AuthRuleService(); |
||||
|
$result = $service->list($this->request->user_id,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function allList() |
||||
|
{ |
||||
|
$service = new AuthRuleService(); |
||||
|
$result = $service->allList($this->request->user_id); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getSideMenu(){ |
||||
|
$service = new AuthRuleService(); |
||||
|
$result = $service->getSideMenu($this->request->user_id); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new AuthRuleService(); |
||||
|
$result = $service->del($this->request->param('id')); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\document; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\document\AnnouncementService; |
||||
|
|
||||
|
class Announcement extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new AnnouncementService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new AnnouncementService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function detail() |
||||
|
{ |
||||
|
$service = new AnnouncementService(); |
||||
|
$result = $service->detail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new AnnouncementService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new AnnouncementService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\document; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\document\BannerService; |
||||
|
|
||||
|
class Banner extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new BannerService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new BannerService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function detail() |
||||
|
{ |
||||
|
$service = new BannerService(); |
||||
|
$result = $service->detail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new BannerService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new BannerService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\document; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\document\FaqService; |
||||
|
|
||||
|
class Faq extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new FaqService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new FaqService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function detail() |
||||
|
{ |
||||
|
$service = new FaqService(); |
||||
|
$result = $service->detail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new FaqService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new FaqService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\document; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\document\IndexService; |
||||
|
|
||||
|
class Index extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new IndexService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new IndexService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function detail() |
||||
|
{ |
||||
|
$service = new IndexService(); |
||||
|
$result = $service->detail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new IndexService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new IndexService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,38 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\document; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\document\LandingPageService; |
||||
|
|
||||
|
class LandingPage extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new LandingPageService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new LandingPageService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new LandingPageService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new LandingPageService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,52 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\BlockStockService; |
||||
|
|
||||
|
// 大宗交易 |
||||
|
class BlockStock extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new BlockStockService(); |
||||
|
$result = $service->index($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 新增 |
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new BlockStockService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new BlockStockService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 上市 |
||||
|
// public function open() |
||||
|
// { |
||||
|
// $service = new BlockStockService(); |
||||
|
// $result = $service->open($this->request->param()); |
||||
|
// return json($result); |
||||
|
// } |
||||
|
|
||||
|
// 删除 |
||||
|
// public function del() |
||||
|
// { |
||||
|
// $service = new BlockStockService(); |
||||
|
// $result = $service->del($this->request->param()); |
||||
|
// return json($result); |
||||
|
// } |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\BrokerageService; |
||||
|
|
||||
|
class Brokerage extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new BrokerageService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new BrokerageService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new BrokerageService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,66 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\ContractService; |
||||
|
|
||||
|
// 合约交易对 |
||||
|
class Contract extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getTradeNameList() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->getTradeNameList($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function setting() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->setting($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function set_add() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->set_add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function set_edit() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->set_edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function set_del() |
||||
|
{ |
||||
|
$service = new ContractService(); |
||||
|
$result = $service->set_del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\DMarketService; |
||||
|
|
||||
|
class DMarket extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new DMarketService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new DMarketService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function detail() |
||||
|
{ |
||||
|
$service = new DMarketService(); |
||||
|
$result = $service->detail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new DMarketService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new DMarketService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,40 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\DigitalService; |
||||
|
|
||||
|
// 现货交易对 |
||||
|
class Digital extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new DigitalService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new DigitalService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new DigitalService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getTradeNameList() |
||||
|
{ |
||||
|
$service = new DigitalService(); |
||||
|
$result = $service->getTradeNameList($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\DrawalService; |
||||
|
|
||||
|
class Drawal extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 提现手续费 |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
|
||||
|
$service = new DrawalService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new DrawalService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\FeeService; |
||||
|
|
||||
|
// 交易手续费 |
||||
|
class Fee extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new FeeService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new FeeService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new FeeService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,66 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\ForexService; |
||||
|
|
||||
|
// 合约交易对 |
||||
|
class Forex extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getTradeNameList() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->getTradeNameList($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function setting() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->setting($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function set_add() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->set_add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function set_edit() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->set_edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function set_del() |
||||
|
{ |
||||
|
$service = new ForexService(); |
||||
|
$result = $service->set_del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,56 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\GiveHkdStockService; |
||||
|
use app\admin\service\setting\GiveIdnStockService; |
||||
|
use app\admin\service\setting\GiveInStockService; |
||||
|
use app\admin\service\setting\GiveMysStockService; |
||||
|
use app\admin\service\setting\GiveSgdStockService; |
||||
|
use app\admin\service\setting\GiveStockService; |
||||
|
use app\admin\service\setting\GiveThaStockService; |
||||
|
use app\admin\service\setting\GiveUsStockService; |
||||
|
use app\model\StockMarketModel; |
||||
|
|
||||
|
// 送股 |
||||
|
class GiveStock extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$param = $this->request->param(); |
||||
|
if (empty($param['market_type'])) { |
||||
|
$result = [ |
||||
|
'code' => 0, |
||||
|
'message' => 'SUCCESS', |
||||
|
'data' => ['total' => 0, 'list' => [], 'extent' => StockMarketModel::STOCK_MARKET_TYPE] |
||||
|
]; |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
$result = (new GiveStockService)->index($param['market_type'], $param, $this->getAdminId()); |
||||
|
return json($result); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('0', 'The system is busy. Please try again later.', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 新增 |
||||
|
public function add() |
||||
|
{ |
||||
|
try { |
||||
|
$param = $this->request->param(); |
||||
|
if (empty($param['market_type'])) return json([]); |
||||
|
|
||||
|
$result = (new GiveStockService)->add($param['market_type'], $param); |
||||
|
return json($result); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('0', 'The system is busy. Please try again later.', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\HqService; |
||||
|
|
||||
|
// 合约插针行情 |
||||
|
class Hq extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new HqService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new HqService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new HqService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new HqService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,47 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\LanguageService; |
||||
|
|
||||
|
// 多语言设置 |
||||
|
class Language extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new LanguageService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new LanguageService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new LanguageService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new LanguageService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getNameList() |
||||
|
{ |
||||
|
$service = new LanguageService(); |
||||
|
$result = $service->getNameList(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\MarketService; |
||||
|
|
||||
|
class Market extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new MarketService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new MarketService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function detail() |
||||
|
{ |
||||
|
$service = new MarketService(); |
||||
|
$result = $service->detail($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new MarketService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new MarketService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,63 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\OptionInService; |
||||
|
|
||||
|
// 期权 |
||||
|
class Option extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
/*********************************印度期权*********************************/ |
||||
|
public function indexIn() |
||||
|
{ |
||||
|
$service = new OptionInService(); |
||||
|
$result = $service->index($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function addIn() |
||||
|
{ |
||||
|
$service = new OptionInService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function editIn() |
||||
|
{ |
||||
|
$service = new OptionInService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getTradeNameListIn() |
||||
|
{ |
||||
|
$service = new OptionInService(); |
||||
|
$result = $service->getTradeNameList(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function onOffIn() |
||||
|
{ |
||||
|
$service = new OptionInService(); |
||||
|
$result = $service->onOff($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function batchEditIn() |
||||
|
{ |
||||
|
$service = new OptionInService(); |
||||
|
$result = $service->batchEdit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
/*********************************印度期权*********************************/ |
||||
|
|
||||
|
public function refresh() |
||||
|
{ |
||||
|
$result = (new OptionInService())->refresh(); |
||||
|
return json([]); |
||||
|
} |
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\PaymentService; |
||||
|
use think\App; |
||||
|
|
||||
|
// 股票交易对 |
||||
|
class Payment extends AdminBaseController |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new PaymentService(); |
||||
|
$result = $service->index($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new PaymentService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new PaymentService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function info() |
||||
|
{ |
||||
|
$service = new PaymentService(); |
||||
|
$result = $service->info($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new PaymentService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,91 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\PreFundStockService; |
||||
|
|
||||
|
// 基金 新股设置 |
||||
|
class PreFundStock extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->index($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 获取历史走势 |
||||
|
public function history() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->history($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 新增 |
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 上市 |
||||
|
public function open() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->open($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 退市 |
||||
|
public function close() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->close($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 编辑 |
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 返息-定时任务 |
||||
|
public function interest() |
||||
|
{ |
||||
|
$service = new PreFundStockService(); |
||||
|
$service->interest(); |
||||
|
} |
||||
|
|
||||
|
public function referStockAdd(){ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->referStockAdd($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function referStockDel(){ |
||||
|
$service = new PreFundStockService(); |
||||
|
$result = $service->referStockDel($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,59 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\IPOService; |
||||
|
|
||||
|
// 美股 新股设置 |
||||
|
class PreStock extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result= (new IPOService())->stockIPOList($market_type,$this->request->param(),$this->getAdminId()); |
||||
|
return json($result); |
||||
|
} |
||||
|
// 新增 |
||||
|
public function add() |
||||
|
{ |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result = (new IPOService())->addStockIPO($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
// 编辑 |
||||
|
public function edit() |
||||
|
{ |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result = (new IPOService())->editStockIPO($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
// 上市 |
||||
|
public function open() |
||||
|
{ |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result = (new IPOService())->stockIPO($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function note(){ |
||||
|
$service = new IPOService(); |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result = $service->repeatNoteGo($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
public function cancel(){ |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result = (new IPOService())->cancelIPO($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 删除 |
||||
|
public function del() |
||||
|
{ |
||||
|
$market_type=intval($this->request->param('market_type')); |
||||
|
$result = (new IPOService())->delStockIPO($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\ServiceService; |
||||
|
|
||||
|
// 客服配置 |
||||
|
class Service extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new ServiceService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new ServiceService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new ServiceService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new ServiceService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\IPOService; |
||||
|
use app\admin\service\setting\StockService; |
||||
|
|
||||
|
// 股票交易对 |
||||
|
class Stock extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$market_type=$this->request->param('market_type'); |
||||
|
$result = (new IPOService())->stockList($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$market_type=$this->request->param('market_type'); |
||||
|
$result = (new IPOService())->addStock($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$market_type=$this->request->param('market_type'); |
||||
|
$result = (new IPOService())->editStock($market_type,$this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function getTradeNameList() |
||||
|
{ |
||||
|
$market_type=$this->request->param('market_type'); |
||||
|
$result = (new IPOService())->getTradeNameList($market_type); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\StockIndexService; |
||||
|
|
||||
|
/** |
||||
|
* 股票指数操作 |
||||
|
*/ |
||||
|
class StockIndex extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$result = (new StockIndexService())->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function update() |
||||
|
{ |
||||
|
$result = (new StockIndexService())->update($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,40 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\StockMarketService; |
||||
|
|
||||
|
// 股票市场 |
||||
|
class StockMarket extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new StockMarketService(); |
||||
|
$result = $service->index(); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new StockMarketService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new StockMarketService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 股票筛选 根据股票号 股票市场 模糊搜索股票数据 |
||||
|
public function searchStock() |
||||
|
{ |
||||
|
$service = new StockMarketService(); |
||||
|
$result = $service->searchStock($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\controller\setting; |
||||
|
|
||||
|
// 股票盘前价格 |
||||
|
use app\admin\controller\AdminBaseController; |
||||
|
use app\admin\service\setting\StockPriceSettingService; |
||||
|
|
||||
|
class StockPrice extends AdminBaseController |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
$service = new StockPriceSettingService(); |
||||
|
$result = $service->index($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 新增 |
||||
|
public function add() |
||||
|
{ |
||||
|
$service = new StockPriceSettingService(); |
||||
|
$result = $service->add($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit() |
||||
|
{ |
||||
|
$service = new StockPriceSettingService(); |
||||
|
$result = $service->edit($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
|
||||
|
public function del() |
||||
|
{ |
||||
|
$service = new StockPriceSettingService(); |
||||
|
$result = $service->del($this->request->param()); |
||||
|
return json($result); |
||||
|
} |
||||
|
} |
@ -0,0 +1,54 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\middleware; |
||||
|
|
||||
|
use app\utility\BusinessLog; |
||||
|
|
||||
|
class AdminLog |
||||
|
{ |
||||
|
|
||||
|
/** |
||||
|
* 处理请求 |
||||
|
* |
||||
|
* @param \think\Request $param |
||||
|
* @param \Closure $next |
||||
|
* @return Response |
||||
|
*/ |
||||
|
public function handle($request, \Closure $next) |
||||
|
{ |
||||
|
//得到要log的数据 |
||||
|
$adminId = $request->user_id; |
||||
|
$pathInfo = $request->pathinfo(); |
||||
|
$host = $request->server("HTTP_HOST"); |
||||
|
$uri = $request->server("REQUEST_URI"); |
||||
|
$ua = $request->server("HTTP_USER_AGENT"); |
||||
|
$ip = $request->ip(); |
||||
|
|
||||
|
//request参数 url上参数 |
||||
|
$requestData = $request->request(); |
||||
|
|
||||
|
//body请求参数 |
||||
|
$param = $request->param(); |
||||
|
|
||||
|
//放入数组 |
||||
|
$content = [ |
||||
|
"admin_id" => $adminId, |
||||
|
"host" => $host, |
||||
|
"uri" => $uri, |
||||
|
"ua" => $ua, |
||||
|
"ip" => $ip, |
||||
|
"request_param" => json_encode($requestData), |
||||
|
"body_param" => json_encode($param), |
||||
|
"path_info" => '/' . $pathInfo, |
||||
|
"create_date" => date("Y-m-d"), |
||||
|
"create_time" => date("Y-m-d H:i:s") |
||||
|
]; |
||||
|
|
||||
|
//log |
||||
|
$log = new BusinessLog(); |
||||
|
$log->log($content); |
||||
|
|
||||
|
//返回 |
||||
|
return $next($request); |
||||
|
} |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\middleware; |
||||
|
use app\utility\Jwt; |
||||
|
|
||||
|
class Check |
||||
|
{ |
||||
|
|
||||
|
public function handle($request, \Closure $next) |
||||
|
{ |
||||
|
$token = $request->header('Authorization'); |
||||
|
// print_r($token); |
||||
|
// die(); |
||||
|
//jwt进行校验token |
||||
|
$res = (new Jwt())->chekToken($token); |
||||
|
if ($res['code'] != 1 ){ |
||||
|
return json(['code' => 401, 'message' => $res['msg'],'data' => $res]); |
||||
|
} |
||||
|
$request->user_id = $res['data']->user_id; |
||||
|
return $next($request); |
||||
|
} |
||||
|
} |
@ -0,0 +1,616 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use think\facade\Route; |
||||
|
|
||||
|
$header = [ |
||||
|
'Access-Control-Allow-Credentials' => 'true', |
||||
|
'Access-Control-Max-Age' => 1800, |
||||
|
'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE, OPTIONS', |
||||
|
'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With,Token,Language,X-token,IgnoreCancelToken', |
||||
|
]; |
||||
|
|
||||
|
|
||||
|
// 需要登陆的接口 使用中间件校验 请求路径 XwkjlLbDcG/test |
||||
|
Route::get('/test', 'Test/index'); |
||||
|
Route::group('/', function () { |
||||
|
// 上传图片 |
||||
|
Route::post('/upload', 'Upload/upload'); |
||||
|
// 国家和地区 |
||||
|
Route::post('/country', 'Country/getAll'); |
||||
|
// 配置 |
||||
|
Route::post('/set_config', 'Config/setConfig'); |
||||
|
Route::post('/get_config', 'Config/getConfig'); |
||||
|
|
||||
|
// 首页数据 |
||||
|
Route::post('/index', 'Index/index'); |
||||
|
|
||||
|
// 现货订单 |
||||
|
Route::post('/order/digital_place', 'Order/digitalPlace'); |
||||
|
Route::post('/order/digital_back', 'Order/digitalBack'); |
||||
|
Route::post('/order/digital_deal', 'Order/digitalDeal'); |
||||
|
|
||||
|
|
||||
|
// 合约订单 |
||||
|
Route::post('/order/contract_hold', 'Order/contractHold'); |
||||
|
Route::post('/order/contract_place', 'Order/contractPlace'); |
||||
|
Route::post('/order/contract_back', 'Order/contractBack'); |
||||
|
Route::post('/order/contract_clear', 'Order/contractClear'); |
||||
|
// 秒合约订单 |
||||
|
Route::post('/order/contract_sec_hold', 'Order/contractSecHold'); |
||||
|
Route::post('/order/contract_sec_place', 'Order/contractSecPlace'); |
||||
|
Route::post('/order/contract_sec_back', 'Order/contractSecBack'); |
||||
|
Route::post('/order/contract_sec_clear', 'Order/contractSecClear'); |
||||
|
|
||||
|
|
||||
|
// 外汇订单 |
||||
|
Route::post('/order/forex_hold', 'Order/forexHold'); |
||||
|
Route::post('/order/forex_place', 'Order/forexPlace'); |
||||
|
Route::post('/order/forex_back', 'Order/forexBack'); |
||||
|
Route::post('/order/forex_clear', 'Order/forexClear'); |
||||
|
|
||||
|
|
||||
|
// 股票-废弃 |
||||
|
// Route::post('/order/stock_hold', 'Order/stockHold'); |
||||
|
// Route::post('/order/stock_place', 'Order/stockPlace'); |
||||
|
// Route::post('/order/stock_back', 'Order/stockBack'); |
||||
|
// Route::post('/order/stock_clear', 'Order/stockClear'); |
||||
|
|
||||
|
// 美股 |
||||
|
Route::post('/order/us_stock_hold', 'Order/StockHold')->append(['market_type' =>3]); |
||||
|
Route::post('/order/us_stock_place', 'Order/StockPlace')->append(['market_type' =>3]); |
||||
|
Route::post('/order/us_stock_back', 'Order/StockBack')->append(['market_type' =>3]); |
||||
|
Route::post('/order/us_stock_clear', 'Order/StockClear')->append(['market_type' =>3]); |
||||
|
|
||||
|
// 印尼股票 |
||||
|
Route::post('/order/idn_stock_hold', 'Order/StockHold')->append(['market_type' =>4]); |
||||
|
Route::post('/order/idn_stock_place', 'Order/StockPlace')->append(['market_type' =>4]); |
||||
|
Route::post('/order/idn_stock_back', 'Order/StockBack')->append(['market_type' =>4]); |
||||
|
Route::post('/order/idn_stock_clear', 'Order/StockClear')->append(['market_type' =>4]); |
||||
|
|
||||
|
// 马来西亚股票 |
||||
|
Route::post('/order/mys_stock_hold', 'Order/StockHold')->append(['market_type' =>5]); |
||||
|
Route::post('/order/mys_stock_place', 'Order/StockPlace')->append(['market_type' =>5]); |
||||
|
Route::post('/order/mys_stock_back', 'Order/StockBack')->append(['market_type' =>5]); |
||||
|
Route::post('/order/mys_stock_clear', 'Order/StockClear')->append(['market_type' =>5]); |
||||
|
|
||||
|
// 泰国股票 |
||||
|
Route::post('/order/tha_stock_hold', 'Order/StockHold')->append(['market_type' =>6]); |
||||
|
Route::post('/order/tha_stock_place', 'Order/StockPlace')->append(['market_type' =>6]); |
||||
|
Route::post('/order/tha_stock_back', 'Order/StockBack')->append(['market_type' =>6]); |
||||
|
Route::post('/order/tha_stock_clear', 'Order/StockClear')->append(['market_type' =>6]); |
||||
|
|
||||
|
// 印度股票 |
||||
|
Route::post('/order/in_stock_hold', 'Order/StockHold')->append(['market_type' =>7]); |
||||
|
Route::post('/order/in_stock_place', 'Order/stockPlace')->append(['market_type' =>7]); |
||||
|
Route::post('/order/in_stock_back', 'Order/stockBack')->append(['market_type' =>7]); |
||||
|
Route::post('/order/in_stock_clear', 'Order/stockClear')->append(['market_type' =>7]); |
||||
|
|
||||
|
|
||||
|
// 新加坡股票 |
||||
|
Route::post('/order/sgd_stock_hold', 'Order/StockHold')->append(['market_type' =>9]); |
||||
|
Route::post('/order/sgd_stock_place', 'Order/stockPlace')->append(['market_type' =>9]); |
||||
|
Route::post('/order/sgd_stock_back', 'Order/stockBack')->append(['market_type' =>9]); |
||||
|
Route::post('/order/sgd_stock_clear', 'Order/stockClear')->append(['market_type' =>9]); |
||||
|
|
||||
|
// 香港股票 |
||||
|
Route::post('/order/hk_stock_hold', 'Order/StockHold')->append(['market_type' =>12]); |
||||
|
Route::post('/order/hk_stock_place', 'Order/stockPlace')->append(['market_type' =>12]); |
||||
|
Route::post('/order/hk_stock_back', 'Order/stockBack')->append(['market_type' =>12]); |
||||
|
Route::post('/order/hk_stock_clear', 'Order/stockClear')->append(['market_type' =>12]); |
||||
|
// 英国股票 |
||||
|
Route::post('/order/uk_stock_hold', 'Order/StockHold')->append(['market_type' =>14]); // 股票持仓 |
||||
|
Route::post('/order/uk_stock_place', 'Order/StockPlace')->append(['market_type' =>14]); // 股票挂单 |
||||
|
Route::post('/order/uk_stock_back', 'Order/StockBack')->append(['market_type' =>14]); // 股票撤单 |
||||
|
Route::post('/order/uk_stock_clear', 'Order/StockClear')->append(['market_type' =>14]); // 股票平仓 |
||||
|
// 法国股票 |
||||
|
Route::post('/order/fur_stock_hold', 'Order/StockHold')->append(['market_type' =>15]); // 股票持仓 |
||||
|
Route::post('/order/fur_stock_place', 'Order/StockPlace')->append(['market_type' =>15]); // 股票挂单 |
||||
|
Route::post('/order/fur_stock_back', 'Order/StockBack')->append(['market_type' =>15]); // 股票撤单 |
||||
|
Route::post('/order/fur_stock_clear', 'Order/StockClear')->append(['market_type' =>15]); // 股票平仓 |
||||
|
// 德国股票 |
||||
|
Route::post('/order/eur_stock_hold', 'Order/StockHold')->append(['market_type' =>16]); // 股票持仓 |
||||
|
Route::post('/order/eur_stock_place', 'Order/StockPlace')->append(['market_type' =>16]); // 股票挂单 |
||||
|
Route::post('/order/eur_stock_back', 'Order/StockBack')->append(['market_type' =>16]); // 股票撤单 |
||||
|
Route::post('/order/eur_stock_clear', 'Order/StockClear')->append(['market_type' =>16]); // 股票平仓 |
||||
|
// 巴西股票 |
||||
|
Route::post('/order/eur_stock_hold', 'Order/StockHold')->append(['market_type' =>17]); // 股票持仓 |
||||
|
Route::post('/order/eur_stock_place', 'Order/StockPlace')->append(['market_type' =>17]); // 股票挂单 |
||||
|
Route::post('/order/eur_stock_back', 'Order/StockBack')->append(['market_type' =>17]); // 股票撤单 |
||||
|
Route::post('/order/eur_stock_clear', 'Order/StockClear')->append(['market_type' =>17]); // 股票平仓 |
||||
|
// 巴西股票 |
||||
|
Route::post('/order/jp_stock_hold', 'Order/StockHold')->append(['market_type' =>18]); // 股票持仓 |
||||
|
Route::post('/order/jp_stock_place', 'Order/StockPlace')->append(['market_type' =>18]); // 股票挂单 |
||||
|
Route::post('/order/jp_stock_back', 'Order/StockBack')->append(['market_type' =>18]); // 股票撤单 |
||||
|
Route::post('/order/jp_stock_clear', 'Order/StockClear')->append(['market_type' =>18]); // 股票平仓 |
||||
|
|
||||
|
// 印度期权 |
||||
|
Route::post('/order/in_option_hold', 'Order/inOptionHold'); // 股票持仓 |
||||
|
Route::post('/order/in_option_place', 'Order/inOptionPlace'); // 股票挂单 |
||||
|
Route::post('/order/in_option_back', 'Order/inOptionBack'); // 股票撤单 |
||||
|
Route::post('/order/in_option_clear', 'Order/inOptionClear'); // 股票平仓 |
||||
|
|
||||
|
// 申购订单 |
||||
|
Route::post('/order/pre_stock_order', 'Order/preStock'); |
||||
|
Route::post('/order/update_order_num', 'Order/updateGetNum')->middleware('admin_log'); // 修改中签数 |
||||
|
Route::post('/order/pre_refund', 'Order/preRefund')->middleware('admin_log'); // ipo订单退款 |
||||
|
|
||||
|
//基金订单 |
||||
|
Route::post('/order/fund_order', 'Order/fund'); |
||||
|
Route::post('/order/fund_order_info', 'Order/fundInfo'); |
||||
|
Route::post('/order/fund_interest_list', 'Order/fundInterestList'); |
||||
|
|
||||
|
//大宗交易订单 |
||||
|
Route::post('/order/block_order', 'Order/block'); |
||||
|
|
||||
|
// 代理管理 |
||||
|
Route::post('/agent/index', 'Agent/index'); |
||||
|
Route::post('/agent/user', 'Agent/user'); |
||||
|
Route::post('/agent/manager', 'Agent/manager'); |
||||
|
|
||||
|
// 用户管理 |
||||
|
Route::post('/user/index', 'User/index'); |
||||
|
Route::post('/user/status', 'User/status'); |
||||
|
Route::post('/user/change', 'User/change')->middleware('admin_log'); |
||||
|
Route::post('/user/relation', 'User/relation'); |
||||
|
Route::post('/user/reg_phone', 'User/reg_phone')->middleware('admin_log'); |
||||
|
Route::post('/user/reg_email', 'User/reg_email')->middleware('admin_log'); |
||||
|
Route::post('/user/bank', 'User/bankDetail'); |
||||
|
Route::post('/user/edit_bank', 'User/editBank')->middleware('admin_log'); |
||||
|
Route::post('/user/edit_password', 'User/editPassword')->middleware('admin_log'); |
||||
|
//送股 |
||||
|
Route::post('/user/give_stock', 'setting.GiveStock/add')->middleware('admin_log'); |
||||
|
Route::post('/user/give_stock_list', 'setting.GiveStock/index'); |
||||
|
|
||||
|
// 配置管理 |
||||
|
// 合约插针行情 |
||||
|
Route::post('/setting/hq_index', 'setting.Hq/index'); |
||||
|
Route::post('/setting/hq_add', 'setting.Hq/add'); |
||||
|
Route::post('/setting/hq_edit', 'setting.Hq/edit'); |
||||
|
Route::post('/setting/hq_del', 'setting.Hq/del'); |
||||
|
|
||||
|
// 合约自发行情 |
||||
|
Route::post('/setting/market_index', 'setting.Market/index'); |
||||
|
Route::post('/setting/market_add', 'setting.Market/add'); |
||||
|
Route::post('/setting/market_detail', 'setting.Market/detail'); |
||||
|
Route::post('/setting/market_edit', 'setting.Market/edit'); |
||||
|
Route::post('/setting/market_del', 'setting.Market/del'); |
||||
|
|
||||
|
// 现货行情 |
||||
|
Route::post('/setting/d_market_index', 'setting.DMarket/index'); |
||||
|
Route::post('/setting/d_market_add', 'setting.DMarket/add'); |
||||
|
Route::post('/setting/d_market_detail', 'setting.DMarket/detail'); |
||||
|
Route::post('/setting/d_market_edit', 'setting.DMarket/edit'); |
||||
|
Route::post('/setting/d_market_del', 'setting.DMarket/del'); |
||||
|
|
||||
|
// 返佣配置 |
||||
|
Route::post('/setting/brokerage_index', 'setting.Brokerage/index'); |
||||
|
Route::post('/setting/brokerage_add', 'setting.Brokerage/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/brokerage_edit', 'setting.Brokerage/edit')->middleware('admin_log'); |
||||
|
|
||||
|
// 交易手续费 |
||||
|
Route::post('/setting/fee_index', 'setting.Fee/index'); |
||||
|
Route::post('/setting/fee_add', 'setting.Fee/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/fee_edit', 'setting.Fee/edit')->middleware('admin_log'); |
||||
|
|
||||
|
// 提现手续费 |
||||
|
Route::post('/setting/drawal_index', 'setting.Drawal/index'); |
||||
|
Route::post('/setting/drawal_edit', 'setting.Drawal/edit')->middleware('admin_log'); |
||||
|
|
||||
|
// 多语言 |
||||
|
Route::post('/setting/lang_index', 'setting.Language/index'); |
||||
|
Route::post('/setting/lang_add', 'setting.Language/add'); |
||||
|
Route::post('/setting/lang_edit', 'setting.Language/edit'); |
||||
|
Route::post('/setting/lang_del', 'setting.Language/del'); |
||||
|
Route::post('/setting/lang_select', 'setting.Language/getNameList'); |
||||
|
|
||||
|
// 客服 |
||||
|
Route::post('/setting/service_index', 'setting.Service/index'); |
||||
|
Route::post('/setting/service_add', 'setting.Service/add'); |
||||
|
Route::post('/setting/service_edit', 'setting.Service/edit'); |
||||
|
Route::post('/setting/service_del', 'setting.Service/del'); |
||||
|
|
||||
|
// 现货交易对 |
||||
|
Route::post('/setting/digital_index', 'setting.Digital/index'); |
||||
|
Route::post('/setting/digital_add', 'setting.Digital/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/digital_edit', 'setting.Digital/edit')->middleware('admin_log'); |
||||
|
Route::post('/setting/digital_select', 'setting.Digital/getTradeNameList'); |
||||
|
|
||||
|
// 美股股票交易对 |
||||
|
Route::post('/setting/us_stock_index', 'setting.Stock/index')->append(['market_type' =>3]); |
||||
|
Route::post('/setting/us_stock_add', 'setting.Stock/add')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/us_stock_edit', 'setting.Stock/edit')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/us_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>3]); |
||||
|
// 印尼股股票交易对 |
||||
|
Route::post('/setting/idn_stock_index', 'setting.Stock/index')->append(['market_type' =>4]); |
||||
|
Route::post('/setting/idn_stock_add', 'setting.Stock/add')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/idn_stock_edit', 'setting.Stock/edit')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/idn_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>4]); |
||||
|
// 马股股票交易对 |
||||
|
Route::post('/setting/mys_stock_index', 'setting.Stock/index')->append(['market_type' =>5]); |
||||
|
Route::post('/setting/mys_stock_add', 'setting.Stock/add')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/mys_stock_edit', 'setting.Stock/edit')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/mys_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>5]); |
||||
|
// 泰股股票交易对 |
||||
|
Route::post('/setting/tha_stock_index', 'setting.Stock/index')->append(['market_type' =>6]); |
||||
|
Route::post('/setting/tha_stock_add', 'setting.Stock/add')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/tha_stock_edit', 'setting.Stock/edit')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/tha_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>6]); |
||||
|
// 印度股票交易对 |
||||
|
Route::post('/setting/in_stock_index', 'setting.Stock/index')->append(['market_type' =>7]); |
||||
|
Route::post('/setting/in_stock_add', 'setting.Stock/add')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/in_stock_edit', 'setting.Stock/edit')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/in_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>7]); |
||||
|
// 新加坡股票交易对 |
||||
|
Route::post('/setting/sgd_stock_index', 'setting.Stock/index')->append(['market_type' =>9]); |
||||
|
Route::post('/setting/sgd_stock_add', 'setting.Stock/add')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/sgd_stock_edit', 'setting.Stock/edit')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/sgd_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>9]); |
||||
|
// 香港股票交易对 |
||||
|
Route::post('/setting/hk_stock_index', 'setting.Stock/index')->append(['market_type' =>12]); |
||||
|
Route::post('/setting/hk_stock_add', 'setting.Stock/add')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/hk_stock_edit', 'setting.Stock/edit')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/hk_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>12]); |
||||
|
// 英国股票交易对 |
||||
|
Route::post('/setting/uk_stock_index', 'setting.Stock/index')->append(['market_type' =>14]); |
||||
|
Route::post('/setting/uk_stock_add', 'setting.Stock/add')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/uk_stock_edit', 'setting.Stock/edit')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/uk_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>14]); |
||||
|
|
||||
|
Route::post('/setting/fur_stock_index', 'setting.Stock/index')->append(['market_type' =>15]); |
||||
|
Route::post('/setting/fur_stock_add', 'setting.Stock/add')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/fur_stock_edit', 'setting.Stock/edit')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/fur_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>15]); |
||||
|
|
||||
|
Route::post('/setting/eur_stock_index', 'setting.Stock/index')->append(['market_type' =>16]); |
||||
|
Route::post('/setting/eur_stock_add', 'setting.Stock/add')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/eur_stock_edit', 'setting.Stock/edit')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/eur_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>16]); |
||||
|
|
||||
|
Route::post('/setting/brl_stock_index', 'setting.Stock/index')->append(['market_type' =>17]); |
||||
|
Route::post('/setting/brl_stock_add', 'setting.Stock/add')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
Route::post('/setting/brl_stock_edit', 'setting.Stock/edit')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
Route::post('/setting/brl_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>17]); |
||||
|
|
||||
|
Route::post('/setting/jp_stock_index', 'setting.Stock/index')->append(['market_type' =>18]); |
||||
|
Route::post('/setting/jp_stock_add', 'setting.Stock/add')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
Route::post('/setting/jp_stock_edit', 'setting.Stock/edit')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
Route::post('/setting/jp_stock_select', 'setting.Stock/getTradeNameList')->append(['market_type' =>18]); |
||||
|
|
||||
|
//外汇 |
||||
|
Route::post('/setting/forex_index', 'setting.Forex/index'); |
||||
|
Route::post('/setting/forex_add', 'setting.Forex/add'); |
||||
|
Route::post('/setting/forex_edit', 'setting.Forex/edit'); |
||||
|
Route::post('/setting/forex_select', 'setting.Contract/getTradeNameList'); |
||||
|
|
||||
|
|
||||
|
// 印度期权交易对 |
||||
|
Route::post('/setting/in_option_index', 'setting.Option/indexIn'); |
||||
|
Route::post('/setting/in_option_add', 'setting.Option/addIn'); |
||||
|
Route::post('/setting/in_option_edit', 'setting.Option/editIn'); |
||||
|
Route::post('/setting/in_option_select', 'setting.Option/getTradeNameListIn'); |
||||
|
Route::post('/setting/in_option_on_off', 'setting.Option/onOffIn'); |
||||
|
Route::post('/setting/in_batch_edit', 'setting.Option/batchEditIn'); |
||||
|
|
||||
|
|
||||
|
// 股票市场 |
||||
|
Route::post('/setting/stock_market_index', 'setting.StockMarket/index'); |
||||
|
Route::post('/setting/stock_market_add', 'setting.StockMarket/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/stock_market_edit', 'setting.StockMarket/edit')->middleware('admin_log'); |
||||
|
Route::post('/setting/market_stock_search', 'setting.StockMarket/searchStock'); |
||||
|
|
||||
|
// 合约交易对 |
||||
|
Route::post('/setting/contract_index', 'setting.Contract/index'); |
||||
|
Route::post('/setting/contract_add', 'setting.Contract/add'); |
||||
|
Route::post('/setting/contract_edit', 'setting.Contract/edit'); |
||||
|
Route::post('/setting/contract_select', 'setting.Contract/getTradeNameList'); |
||||
|
|
||||
|
|
||||
|
// 合约交易对 |
||||
|
Route::post('/setting/contract_setting', 'setting.Contract/setting'); |
||||
|
Route::post('/setting/contract_set_add', 'setting.Contract/set_add'); |
||||
|
Route::post('/setting/contract_set_edit', 'setting.Contract/set_edit'); |
||||
|
Route::post('/setting/contract_set_del', 'setting.Contract/set_del'); |
||||
|
|
||||
|
// 合约时间收益 |
||||
|
Route::post('/setting/contract_setting', 'setting.Contract/setting'); |
||||
|
Route::post('/setting/contract_setting_add', 'setting.Contract/set_add'); |
||||
|
Route::post('/setting/contract_setting_edit', 'setting.Contract/set_edit'); |
||||
|
Route::post('/setting/contract_setting_del', 'setting.Contract/set_del'); |
||||
|
|
||||
|
// 股票价格设置 |
||||
|
Route::post('/setting/stock_prices_index', 'setting.StockPrice/index'); |
||||
|
Route::post('/setting/stock_prices_add', 'setting.StockPrice/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/stock_prices_edit', 'setting.StockPrice/edit')->middleware('admin_log'); |
||||
|
Route::post('/setting/stock_prices_del', 'setting.StockPrice/del')->middleware('admin_log'); |
||||
|
|
||||
|
// 支付通道设置 |
||||
|
Route::post('/setting/payment_list', 'setting.Payment/index'); |
||||
|
Route::post('/setting/payment_add', 'setting.Payment/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/payment_edit', 'setting.Payment/edit')->middleware('admin_log'); |
||||
|
Route::post('/setting/payment_del', 'setting.Payment/del')->middleware('admin_log'); |
||||
|
Route::post('/setting/payment_info', 'setting.Payment/info'); |
||||
|
|
||||
|
// 美股新股设置 |
||||
|
Route::post('/setting/pre_us_stock_index', 'setting.PreStock/index')->append(['market_type' =>3]); |
||||
|
Route::post('/setting/pre_us_stock_add', 'setting.PreStock/add')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_us_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_us_stock_open', 'setting.PreStock/open')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_us_stock_del', 'setting.PreStock/del')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_us_stock_note', 'setting.PreStock/note')->append(['market_type' =>3])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_us_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>3])->middleware('admin_log');//取消IPO |
||||
|
|
||||
|
// 印尼股新股设置 |
||||
|
Route::post('/setting/pre_idn_stock_index', 'setting.PreStock/index')->append(['market_type' =>4]); |
||||
|
Route::post('/setting/pre_idn_stock_add', 'setting.PreStock/add')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_idn_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_idn_stock_open', 'setting.PreStock/open')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_idn_stock_del', 'setting.PreStock/del')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_idn_stock_note', 'setting.PreStock/note')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_idn_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>4])->middleware('admin_log'); |
||||
|
|
||||
|
// 马来股新股设置 |
||||
|
Route::post('/setting/pre_mys_stock_index', 'setting.PreStock/index')->append(['market_type' =>5]); |
||||
|
Route::post('/setting/pre_mys_stock_add', 'setting.PreStock/add')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_mys_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_mys_stock_open', 'setting.PreStock/open')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_mys_stock_del', 'setting.PreStock/del')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_mys_stock_note', 'setting.PreStock/note')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_mys_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>5])->middleware('admin_log'); |
||||
|
|
||||
|
// 泰股新股设置 |
||||
|
Route::post('/setting/pre_tha_stock_index', 'setting.PreStock/index')->append(['market_type' =>6]); |
||||
|
Route::post('/setting/pre_tha_stock_add', 'setting.PreStock/add')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_tha_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_tha_stock_open', 'setting.PreStock/open')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_tha_stock_del', 'setting.PreStock/del')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_tha_stock_note', 'setting.PreStock/note')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_tha_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>6])->middleware('admin_log'); |
||||
|
|
||||
|
// 印度股新股设置 |
||||
|
Route::post('/setting/pre_in_stock_index', 'setting.PreStock/index')->append(['market_type' =>7]); |
||||
|
Route::post('/setting/pre_in_stock_add', 'setting.PreStock/add')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_in_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_in_stock_open', 'setting.PreStock/open')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_in_stock_del', 'setting.PreStock/del')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_in_stock_note', 'setting.PreStock/note')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_in_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>7])->middleware('admin_log'); |
||||
|
|
||||
|
// 新加坡股新股设置 |
||||
|
Route::post('/setting/pre_sgd_stock_index', 'setting.PreStock/index')->append(['market_type' =>9]); |
||||
|
Route::post('/setting/pre_sgd_stock_add', 'setting.PreStock/add')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_sgd_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_sgd_stock_open', 'setting.PreStock/open')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_sgd_stock_del', 'setting.PreStock/del')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_sgd_stock_note', 'setting.PreStock/note')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_sgd_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>9])->middleware('admin_log'); |
||||
|
|
||||
|
// 香港新股设置 |
||||
|
Route::post('/setting/pre_hk_stock_index', 'setting.PreStock/index')->append(['market_type' =>12]); |
||||
|
Route::post('/setting/pre_hk_stock_add', 'setting.PreStock/add')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_hk_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_hk_stock_open', 'setting.PreStock/open')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_hk_stock_del', 'setting.PreStock/del')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_hk_stock_note', 'setting.PreStock/note')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_hk_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>12])->middleware('admin_log'); |
||||
|
|
||||
|
// 英国新股设置 |
||||
|
Route::post('/setting/pre_uk_stock_index', 'setting.PreStock/index')->append(['market_type' =>14]); |
||||
|
Route::post('/setting/pre_uk_stock_add', 'setting.PreStock/add')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_uk_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_uk_stock_open', 'setting.PreStock/open')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_uk_stock_del', 'setting.PreStock/del')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_uk_stock_note', 'setting.PreStock/note')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_uk_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>14])->middleware('admin_log'); |
||||
|
|
||||
|
Route::post('/setting/pre_fur_stock_index', 'setting.PreStock/index')->append(['market_type' =>15]); |
||||
|
Route::post('/setting/pre_fur_stock_add', 'setting.PreStock/add')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fur_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fur_stock_open', 'setting.PreStock/open')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fur_stock_del', 'setting.PreStock/del')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fur_stock_note', 'setting.PreStock/note')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fur_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>15])->middleware('admin_log'); |
||||
|
|
||||
|
Route::post('/setting/pre_eur_stock_index', 'setting.PreStock/index')->append(['market_type' =>16]); |
||||
|
Route::post('/setting/pre_eur_stock_add', 'setting.PreStock/add')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_eur_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_eur_stock_open', 'setting.PreStock/open')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_eur_stock_del', 'setting.PreStock/del')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_eur_stock_note', 'setting.PreStock/note')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_eur_stock_cancel', 'setting.PreStock/cancel')->append(['market_type' =>16])->middleware('admin_log'); |
||||
|
|
||||
|
Route::post('/setting/pre_brl_stock_index', 'setting.PreStock/index')->append(['market_type' =>17]); |
||||
|
Route::post('/setting/pre_brl_stock_add', 'setting.PreStock/add')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_brl_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_brl_stock_open', 'setting.PreStock/open')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_brl_stock_del', 'setting.PreStock/del')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_brl_stock_note', 'setting.PreStock/note')->append(['market_type' =>17])->middleware('admin_log'); |
||||
|
|
||||
|
Route::post('/setting/pre_jp_stock_index', 'setting.PreStock/index')->append(['market_type' =>18]); |
||||
|
Route::post('/setting/pre_jp_stock_add', 'setting.PreStock/add')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_jp_stock_edit', 'setting.PreStock/edit')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_jp_stock_open', 'setting.PreStock/open')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_jp_stock_del', 'setting.PreStock/del')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_jp_stock_note', 'setting.PreStock/note')->append(['market_type' =>18])->middleware('admin_log'); |
||||
|
|
||||
|
Route::post('/setting/pre_stock_cancel', 'setting.PreStock/cancel')->middleware('admin_log'); |
||||
|
|
||||
|
// 基金配置 |
||||
|
Route::post('/setting/pre_fund_stock_index', 'setting.PreFundStock/index'); |
||||
|
Route::post('/setting/pre_fund_stock_history', 'setting.PreFundStock/history'); |
||||
|
Route::post('/setting/pre_fund_stock_add', 'setting.PreFundStock/add')->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fund_stock_edit', 'setting.PreFundStock/edit')->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fund_stock_open', 'setting.PreFundStock/open')->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fund_stock_close', 'setting.PreFundStock/close')->middleware('admin_log'); |
||||
|
Route::post('/setting/pre_fund_stock_del', 'setting.PreFundStock/del'); |
||||
|
|
||||
|
Route::post('/setting/refer_stock_add', 'setting.PreFundStock/referStockAdd'); |
||||
|
Route::post('/setting/refer_stock_del', 'setting.PreFundStock/referStockDel'); |
||||
|
|
||||
|
//大宗交易配置 |
||||
|
Route::post('/setting/block_stock_index', 'setting.BlockStock/index'); |
||||
|
Route::post('/setting/block_stock_add', 'setting.BlockStock/add'); |
||||
|
Route::post('/setting/block_stock_edit', 'setting.BlockStock/edit'); |
||||
|
|
||||
|
|
||||
|
// 股票指数 |
||||
|
Route::post('/setting/stock_index_list', 'setting.StockIndex/index'); |
||||
|
Route::post('/setting/stock_index_update', 'setting.StockIndex/update'); |
||||
|
|
||||
|
|
||||
|
// 资金管理 |
||||
|
Route::post('/flow/digital', 'Flow/digital'); |
||||
|
Route::post('/flow/stock', 'Flow/stock'); |
||||
|
Route::post('/flow/contract', 'Flow/contract'); |
||||
|
Route::post('/flow/transfer', 'Flow/transfer'); |
||||
|
Route::post('/flow/fee', 'Flow/fee'); |
||||
|
Route::post('/flow/brokerage', 'Flow/brokerage'); |
||||
|
|
||||
|
Route::post('/flow/us_stock', 'Flow/StockLogs')->append(['market_type' =>3]); |
||||
|
Route::post('/flow/idn_stock', 'Flow/StockLogs')->append(['market_type' =>4]); |
||||
|
Route::post('/flow/mys_stock', 'Flow/StockLogs')->append(['market_type' =>5]); |
||||
|
Route::post('/flow/tha_stock', 'Flow/StockLogs')->append(['market_type' =>6]); |
||||
|
Route::post('/flow/in_stock', 'Flow/StockLogs')->append(['market_type' =>7]); |
||||
|
Route::post('/flow/sgd_stock', 'Flow/StockLogs')->append(['market_type' =>9]); |
||||
|
Route::post('/flow/hk_stock', 'Flow/StockLogs')->append(['market_type' =>12]); |
||||
|
Route::post('/flow/uk_stock', 'Flow/StockLogs')->append(['market_type' =>14]); |
||||
|
Route::post('/flow/fur_stock', 'Flow/StockLogs')->append(['market_type' =>15]); |
||||
|
Route::post('/flow/eur_stock', 'Flow/StockLogs')->append(['market_type' =>16]); |
||||
|
Route::post('/flow/eur_stock', 'Flow/StockLogs')->append(['market_type' =>17]); |
||||
|
Route::post('/flow/jp_stock', 'Flow/StockLogs')->append(['market_type' =>18]); |
||||
|
|
||||
|
|
||||
|
|
||||
|
Route::post('/flow/fund_stock', 'Flow/fundStock'); |
||||
|
|
||||
|
Route::post('/flow/in_option_stock', 'Flow/inOptionStock'); |
||||
|
Route::post('/flow/block_stock', 'Flow/blockStock'); |
||||
|
|
||||
|
|
||||
|
// 充值订单 |
||||
|
Route::post('/recharge/index', 'Recharge/index'); // 充值订单 |
||||
|
Route::post('/recharge/info', 'Recharge/info'); |
||||
|
Route::post('/recharge/check', 'Recharge/check')->middleware('admin_log'); |
||||
|
|
||||
|
Route::post('/withdraw/index', 'Withdraw/index'); |
||||
|
Route::post('/withdraw/info', 'Withdraw/info'); |
||||
|
Route::post('/withdraw/change_status', 'Withdraw/change_status')->middleware('admin_log'); |
||||
|
Route::post('/withdraw/get_balance', 'Withdraw/get_balance'); |
||||
|
Route::post('/withdraw/channel_list', 'Withdraw/channel_list'); |
||||
|
|
||||
|
// 文档管理 |
||||
|
// 首页文章 |
||||
|
Route::post('/document/doc_index', 'document.Index/index'); |
||||
|
Route::post('/document/doc_add', 'document.Index/add'); |
||||
|
Route::post('/document/doc_detail', 'document.Index/detail'); |
||||
|
Route::post('/document/doc_edit', 'document.Index/edit'); |
||||
|
Route::post('/document/doc_del', 'document.Index/del'); |
||||
|
// 公告管理 |
||||
|
Route::post('/document/announcement_index', 'document.Announcement/index'); |
||||
|
Route::post('/document/announcement_add', 'document.Announcement/add'); |
||||
|
Route::post('/document/announcement_detail', 'document.Announcement/detail'); |
||||
|
Route::post('/document/announcement_edit', 'document.Announcement/edit'); |
||||
|
Route::post('/document/announcement_del', 'document.Announcement/del'); |
||||
|
// FAQ |
||||
|
Route::post('/document/faq_index', 'document.Faq/index'); |
||||
|
Route::post('/document/faq_add', 'document.Faq/add'); |
||||
|
Route::post('/document/faq_detail', 'document.Faq/detail'); |
||||
|
Route::post('/document/faq_edit', 'document.Faq/edit'); |
||||
|
Route::post('/document/faq_del', 'document.Faq/del'); |
||||
|
// banner |
||||
|
Route::post('/document/banner_index', 'document.Banner/index'); |
||||
|
Route::post('/document/banner_add', 'document.Banner/add'); |
||||
|
Route::post('/document/banner_detail', 'document.Banner/detail'); |
||||
|
Route::post('/document/banner_edit', 'document.Banner/edit'); |
||||
|
Route::post('/document/banner_del', 'document.Banner/del'); |
||||
|
|
||||
|
|
||||
|
//用户中心 |
||||
|
Route::post('/account/update_info', 'Admin/updateInfo'); |
||||
|
Route::post('/account/add', 'Admin/addUser'); |
||||
|
Route::get('/account/get_user_info', 'Admin/getUserInfo'); |
||||
|
Route::post('/account/update_password', 'Admin/updatePassword'); |
||||
|
Route::post('/account/update_status', 'Admin/updateAccountStauts'); |
||||
|
Route::post('/account/list', 'Admin/getUserList'); |
||||
|
Route::post('/account/del', 'Admin/del'); |
||||
|
Route::get('/account/logout', 'Admin/logout'); |
||||
|
Route::post('/account/update_account', 'Admin/updateAccount'); |
||||
|
Route::get('/account/get_perm_code', 'Admin/getPermCode'); |
||||
|
|
||||
|
//权限菜单 |
||||
|
Route::post('/auth/rule/add', 'auth.AuthRule/add'); |
||||
|
Route::post('/auth/rule/edit', 'auth.AuthRule/edit'); |
||||
|
Route::post('/auth/rule/list', 'auth.AuthRule/list'); |
||||
|
Route::post('/auth/rule/all_list', 'auth.AuthRule/allList'); |
||||
|
Route::post('/auth/rule/del', 'auth.AuthRule/del'); |
||||
|
Route::get('/auth/rule/get_side_menu', 'auth.AuthRule/getSideMenu'); |
||||
|
//权限角色 |
||||
|
Route::post('/auth/role/add', 'auth.AuthRole/add'); |
||||
|
Route::post('/auth/role/edit', 'auth.AuthRole/edit'); |
||||
|
Route::post('/auth/role/list', 'auth.AuthRole/list'); |
||||
|
Route::post('/auth/role/update_status', 'auth.AuthRole/updateStatus'); |
||||
|
Route::post('/auth/role/all_list', 'auth.AuthRole/allList'); |
||||
|
Route::post('/auth/role/del', 'auth.AuthRole/del'); |
||||
|
|
||||
|
// 实名认证操作 |
||||
|
Route::post('/user/verify_detail', 'User/verifyDetail'); |
||||
|
Route::post('/user/verify_do', 'User/verifyDo'); |
||||
|
Route::post('/user/lever_review', 'User/leverReview'); |
||||
|
Route::post('/user/reg_code', 'User/getRegCode'); |
||||
|
Route::post('/user/auto_login', 'User/autoLogin'); |
||||
|
|
||||
|
//设置杠杆 |
||||
|
Route::post('/user/get_leverage', 'User/getLeverageNum'); |
||||
|
Route::post('/user/edit_leverage', 'User/editLeverageNum')->middleware('admin_log'); |
||||
|
|
||||
|
// 投票 |
||||
|
Route::post('/vote/index', 'Vote/index'); |
||||
|
Route::post('/vote/add', 'Vote/add'); |
||||
|
Route::post('/vote/edit', 'Vote/edit'); |
||||
|
Route::post('/vote/del', 'Vote/del'); |
||||
|
|
||||
|
// 用户验证码 |
||||
|
Route::post('/user/get_user_code', 'User/getUserCode'); |
||||
|
})->allowCrossDomain($header) |
||||
|
->middleware('admin_auth'); |
||||
|
|
||||
|
|
||||
|
Route::post('/admin/log', 'Admin/log')->allowCrossDomain($header)->middleware('admin_auth'); |
||||
|
|
||||
|
//登陆 |
||||
|
Route::post('/login/login', 'Login/login')->allowCrossDomain($header); |
||||
|
// 缓存股票数据 |
||||
|
Route::get('/cacheIdnStock', 'Index/cacheIdnStock'); |
||||
|
Route::get('/cacheUsStock', 'Index/cacheUsStock'); |
||||
|
Route::get('/cacheMysStock', 'Index/cacheMysStock'); |
||||
|
Route::get('/cacheThaStock', 'Index/cacheThaStock'); |
||||
|
Route::get('/cacheInStock', 'Index/cacheInStock'); |
||||
|
Route::get('/cacheSgdStock', 'Index/cacheSgdStock'); |
||||
|
Route::get('/cacheHkStock', 'Index/cacheHkStock'); |
||||
|
Route::get('/cacheGbxStock', 'Index/cacheGbxStock'); |
||||
|
Route::get('/cacheFurStock', 'Index/cacheFurStock'); |
||||
|
Route::get('/cacheEurStock', 'Index/cacheEurStock'); |
||||
|
Route::get('/cacheBrlStock', 'Index/cacheBrlStock'); |
||||
|
Route::get('/cacheJpStock', 'Index/cacheJpStock'); |
||||
|
|
||||
|
|
||||
|
Route::get('/cacheForex', 'Index/cacheForex'); |
||||
|
Route::get('/cacheInOption', 'Index/cacheInOption'); |
||||
|
Route::get('/invite_code', 'Admin/inviteCode'); |
||||
|
|
||||
|
//Route::get('/cache_stock', 'Index/cacheStock'); |
||||
|
Route::get('/cache_redis', 'Index/cacheRedis'); |
||||
|
Route::get('/test_send', 'Index/sendToGo'); |
||||
|
|
||||
|
Route::get('/sign_stock', 'Index/signStock'); |
||||
|
Route::post('/add_stock', 'Index/autoAddStock'); |
||||
|
|
||||
|
Route::get('/deal_stock', 'Index/dealStock'); |
||||
|
|
||||
|
// 定时任务 基金返息 |
||||
|
Route::get('/setting/fund_interest', 'setting.PreFundStock/interest'); |
||||
|
|
||||
|
Route::get('/setting/in_option_refresh', 'setting.Option/refresh'); |
||||
|
|
||||
|
// 修改 印度股-source |
||||
|
Route::post('/update_source', 'Index/updateSource'); |
||||
|
|
@ -0,0 +1,762 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
|
||||
|
use app\model\AdminModel; |
||||
|
use app\model\ContractMarketModel; |
||||
|
use app\model\ContractSettingModel; |
||||
|
use GuzzleHttp\Client; |
||||
|
use GuzzleHttp\Exception\GuzzleException; |
||||
|
use think\db\exception\PDOException; |
||||
|
use think\exception\ValidateException; |
||||
|
use think\facade\Db; |
||||
|
use think\facade\Log; |
||||
|
|
||||
|
class AdminBaseService |
||||
|
{ |
||||
|
// 获取redis客户端 |
||||
|
public function getRedis() |
||||
|
{ |
||||
|
$config = \think\facade\Config::get('cache.stores.redis'); |
||||
|
$redis = new \Redis(); |
||||
|
|
||||
|
try { |
||||
|
$redis->connect($config['host'], $config['port'], 10); |
||||
|
} catch (\Exception $exception) { |
||||
|
echo 'redis连接失败'; |
||||
|
} |
||||
|
if (!empty($config['password'])) { |
||||
|
$redis->auth($config['password']); |
||||
|
} |
||||
|
|
||||
|
$redis->select($config['select']); |
||||
|
return $redis; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* @param string $code // 状态码 |
||||
|
* @param string $msg // 提示信息 |
||||
|
* @param array $result // 返回结果 |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function toData(string $code = '', string $msg = '', array $result = []): array |
||||
|
{ |
||||
|
return [ |
||||
|
'code' => $code, |
||||
|
'message' => $msg, |
||||
|
'data' => $result |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
// 根据是否是代理 以及用户id 获取where条件 |
||||
|
public function getWhereByIsAgentAndUserId($adminId, $where, $userId) |
||||
|
{ |
||||
|
// 判断是否是代理 |
||||
|
$isAgent = AdminModel::checkUserIsAgent($adminId); |
||||
|
// 不是代理 |
||||
|
if (!$isAgent) { |
||||
|
if ($userId > 0) { |
||||
|
$where[] = ['user_id', '=', $userId]; |
||||
|
} |
||||
|
return $where; |
||||
|
} |
||||
|
|
||||
|
// 获取管理用户 |
||||
|
$userIds = AdminModel::getUserIdsByAgentId($adminId); |
||||
|
if (empty($userIds)) { |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// 如果用户搜索 |
||||
|
if ($userId > 0) { |
||||
|
$where[] = ['user_id', 'in', $userIds]; |
||||
|
$where[] = ['user_id', '=', $userId]; |
||||
|
return $where; |
||||
|
} |
||||
|
|
||||
|
// 没有用户搜索 |
||||
|
$where[] = ['user_id', 'in', $userIds]; |
||||
|
return $where; |
||||
|
} |
||||
|
|
||||
|
// 校验admin_id 是否可以管理 userId |
||||
|
public function checkUserIdInAgent($adminId, $userId) |
||||
|
{ |
||||
|
// 判断是否是代理 |
||||
|
$isAgent = AdminModel::checkUserIsAgent($adminId); |
||||
|
// 不是代理 |
||||
|
if (!$isAgent) { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
$userIds = AdminModel::getUserIdsByAgentId($adminId); |
||||
|
if (in_array($userId, $userIds)) { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* @param $user_id |
||||
|
* @param $account_type |
||||
|
* @param $change_usable_num |
||||
|
* @param $change_frozen_num |
||||
|
* @param $change_type 变动类型:1-充值,2-提现,3-买入,4-卖出,5-冻结,6-解冻,7-账户转出,8-账户转入 ,9-注册返佣,10-开仓返佣 ,11-平仓返佣,12-调账加钱 13-调账减钱 19-基金返息 20-IPO订单退款 |
||||
|
*/ |
||||
|
public function updateUserAsset($user_id, $account_type, $change_type, $change_usable_num, $change_frozen_num = 0, $order_no = "", $change_log_admin_id = 0, $rate = 0) |
||||
|
{ |
||||
|
$prefix = env('database.prefix'); |
||||
|
$where['user_id'] = $user_id; |
||||
|
switch ($account_type) { |
||||
|
case 1: |
||||
|
$where['digital_id'] = 'USDT'; |
||||
|
$table = $prefix . 'user_digital'; |
||||
|
$log_table = $prefix . 'user_digital_log'; |
||||
|
$log_data['digital_id'] = 'USDT'; |
||||
|
break; |
||||
|
case 2: |
||||
|
$where['contract_id'] = 'USDT'; |
||||
|
$table = $prefix . 'user_contract'; |
||||
|
$log_table = $prefix . 'user_contract_log'; |
||||
|
$log_data['contract_id'] = 'USDT'; |
||||
|
break; |
||||
|
case 3: |
||||
|
$where['stock_id'] = 'USD'; |
||||
|
$table = $prefix . 'user_stock'; |
||||
|
$log_table = $prefix . 'user_stock_log'; |
||||
|
$log_data['stock_id'] = 'USD'; |
||||
|
break; |
||||
|
case 4: |
||||
|
$where['stock_id'] = 'IDR'; |
||||
|
$table = $prefix . 'user_stock_idn'; |
||||
|
$log_table = $prefix . 'user_stock_idn_log'; |
||||
|
$log_data['stock_id'] = 'IDR'; |
||||
|
break; |
||||
|
case 5: |
||||
|
$where['stock_id'] = 'MYR'; |
||||
|
$table = $prefix . 'user_stock_mys'; |
||||
|
$log_table = $prefix . 'user_stock_mys_log'; |
||||
|
$log_data['stock_id'] = 'MYR'; |
||||
|
break; |
||||
|
case 6: |
||||
|
$where['stock_id'] = 'THB'; |
||||
|
$table = $prefix . 'user_stock_tha'; |
||||
|
$log_table = $prefix . 'user_stock_tha_log'; |
||||
|
$log_data['stock_id'] = 'THB'; |
||||
|
break; |
||||
|
case 7: |
||||
|
$where['stock_id'] = 'INR'; |
||||
|
$table = $prefix . 'user_stock_in'; |
||||
|
$log_table = $prefix . 'user_stock_in_log'; |
||||
|
$log_data['stock_id'] = 'INR'; |
||||
|
break; |
||||
|
case 8: |
||||
|
$where['contract_id'] = 'USDT'; |
||||
|
$table = $prefix . 'user_contract_sec'; |
||||
|
$log_table = $prefix . 'user_contract_sec_log'; |
||||
|
$log_data['contract_id'] = 'USDT'; |
||||
|
break; |
||||
|
case 9: |
||||
|
$where['stock_id'] = 'SGD'; |
||||
|
$table = $prefix . 'user_stock_sgd'; |
||||
|
$log_table = $prefix . 'user_stock_sgd_log'; |
||||
|
$log_data['stock_id'] = 'SGD'; |
||||
|
break; |
||||
|
case 10: |
||||
|
$where['stock_id'] = 'USD'; |
||||
|
$table = $prefix . 'user_stock_fund'; |
||||
|
$log_table = $prefix . 'user_stock_fund_log'; |
||||
|
$log_data['stock_id'] = 'USD'; |
||||
|
break; |
||||
|
case 11: |
||||
|
$where['stock_id'] = 'INR'; |
||||
|
$table = $prefix . 'user_stock_option_inr'; |
||||
|
$log_table = $prefix . 'user_stock_option_inr_log'; |
||||
|
$log_data['stock_id'] = 'INR'; |
||||
|
break; |
||||
|
case 12: |
||||
|
$where['stock_id'] = 'HKD'; |
||||
|
$table = $prefix . 'user_stock_hkd'; |
||||
|
$log_table = $prefix . 'user_stock_hkd_log'; |
||||
|
$log_data['stock_id'] = 'HKD'; |
||||
|
break; |
||||
|
case 14: |
||||
|
$where['stock_id'] = 'GBX'; |
||||
|
$table = $prefix . 'user_stock_gbx'; |
||||
|
$log_table = $prefix . 'user_stock_gbx_log'; |
||||
|
$log_data['stock_id'] = 'GBX'; |
||||
|
break; |
||||
|
case 15: |
||||
|
$where['stock_id'] = 'EUR'; |
||||
|
$table = $prefix . 'user_stock_fur'; |
||||
|
$log_table = $prefix . 'user_stock_fur_log'; |
||||
|
$log_data['stock_id'] = 'EUR'; |
||||
|
break; |
||||
|
case 16: |
||||
|
$where['stock_id'] = 'EUR'; |
||||
|
$table = $prefix . 'user_stock_eur'; |
||||
|
$log_table = $prefix . 'user_stock_eur_log'; |
||||
|
$log_data['stock_id'] = 'EUR'; |
||||
|
break; |
||||
|
case 17: |
||||
|
$where['stock_id'] = 'BRL'; |
||||
|
$table = $prefix . 'user_stock_brl'; |
||||
|
$log_table = $prefix . 'user_stock_brl_log'; |
||||
|
$log_data['stock_id'] = 'BRL'; |
||||
|
break; |
||||
|
case 18: |
||||
|
$where['stock_id'] = 'JPY'; |
||||
|
$table = $prefix . 'user_stock_jp'; |
||||
|
$log_table = $prefix . 'user_stock_jp_log'; |
||||
|
$log_data['stock_id'] = 'JPY'; |
||||
|
break; |
||||
|
case 19: |
||||
|
$where['contract_id'] = 'USD'; |
||||
|
$table = $prefix . 'user_forex'; |
||||
|
$log_table = $prefix . 'user_forex_log'; |
||||
|
$log_data['contract_id'] = 'USD'; |
||||
|
break; |
||||
|
default: |
||||
|
return [ |
||||
|
'status' => 100, |
||||
|
'msg' => '账户类型错误' |
||||
|
]; |
||||
|
break; |
||||
|
} |
||||
|
Db::startTrans(); |
||||
|
try { |
||||
|
//user_stock USD |
||||
|
$account_info = Db::table($table)->where($where)->lock(true)->find(); |
||||
|
if (empty($account_info)) { |
||||
|
$insert_data = [ |
||||
|
'user_id' => $user_id, |
||||
|
'usable_num' => 0, |
||||
|
'frozen_num' => 0, |
||||
|
'create_time' => date('Y-m-d H:i:s'), |
||||
|
'update_time' => date('Y-m-d H:i:s') |
||||
|
]; |
||||
|
if (in_array($account_type, [1, 2, 8])) { |
||||
|
$insert_data['contract_id'] = $where['contract_id']; |
||||
|
} else { |
||||
|
$insert_data['stock_id'] = $where['stock_id']; |
||||
|
|
||||
|
} |
||||
|
// 不存在 则新增 |
||||
|
Db::table($table)->insert($insert_data); |
||||
|
|
||||
|
$account_info = Db::table($table)->where($where)->lock(true)->find(); |
||||
|
if (empty($account_info)) { |
||||
|
Db::rollback(); |
||||
|
return [ |
||||
|
'status' => 300, |
||||
|
'msg' => '用户资金账号不存在' |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
$last_usable_num = bcadd($account_info['usable_num'], $change_usable_num, 18); |
||||
|
$last_frozen_num = bcadd($account_info['frozen_num'], $change_frozen_num, 18); |
||||
|
if ($last_usable_num < 0) { |
||||
|
Db::rollback(); |
||||
|
return [ |
||||
|
'status' => 400, |
||||
|
'msg' => '可用资金不能为负' |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
if ($change_type == 6) { |
||||
|
if ($last_frozen_num < 0 && abs($last_frozen_num) > 0.01) { |
||||
|
Db::rollback(); |
||||
|
return [ |
||||
|
'status' => 400, |
||||
|
'msg' => '冻结资金不能为负' |
||||
|
]; |
||||
|
} elseif (abs($last_frozen_num) < 0.01) { |
||||
|
$last_frozen_num = 0; |
||||
|
} |
||||
|
} else { |
||||
|
if ($last_frozen_num < 0) { |
||||
|
Db::rollback(); |
||||
|
return [ |
||||
|
'status' => 400, |
||||
|
'msg' => '冻结资金不能为负' |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if (in_array($change_type, [12, 13]) && $change_log_admin_id > 0 && $rate != 0) { |
||||
|
$balance_change_log["user_id"] = $user_id; |
||||
|
$balance_change_log["type"] = $account_type; |
||||
|
$balance_change_log['before_num'] = bcdiv($account_info['usable_num'], $rate, 18); |
||||
|
$balance_change_log["change_num"] = bcdiv($change_usable_num, $rate, 18); |
||||
|
$balance_change_log["currency_rate"] = $rate; |
||||
|
$balance_change_log["admin_id"] = $change_log_admin_id; |
||||
|
$balance_change_log["create_time"] = date('Y-m-d H:i:s'); |
||||
|
$balance_log_bool = Db::table('bot_user_balance_change_log')->insert($balance_change_log); |
||||
|
if (!$balance_log_bool) { |
||||
|
Db::rollback(); |
||||
|
return [ |
||||
|
'status' => 100, |
||||
|
'msg' => '上分 - 账户流水插入失败' |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Db::commit(); |
||||
|
return [ |
||||
|
'status' => 200, |
||||
|
'msg' => 'ok' |
||||
|
]; |
||||
|
} catch (ValidateException|PDOException|\Exception $e) { |
||||
|
Db::rollback(); |
||||
|
return [ |
||||
|
'status' => 100, |
||||
|
'msg' => $e->getMessage() |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 合约插针缓存 |
||||
|
public function initContractHqData() |
||||
|
{ |
||||
|
$now = date('Y-m-d H:i:s'); |
||||
|
$list = ContractMarketModel::where('type', 0) |
||||
|
->whereTime('begin_time', '>', $now) |
||||
|
->field('trade_name as selfContractCode,begin_time as BeginTime,step as Step ,end_time as EndTime,max_price as Price') |
||||
|
->order('id', 'desc') |
||||
|
->select(); |
||||
|
$rows = []; |
||||
|
$redis = $this->getRedis(); |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
foreach ($rows as $key => $val) { |
||||
|
$keep_decimal = $redis->hget('CONTRACT:LIST:' . $val['selfContractCode'], 'keep_decimal'); |
||||
|
$list[$key]['Digits'] = $keep_decimal; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$reds_key = "contract_hq_setting"; |
||||
|
$redis->del($reds_key); |
||||
|
$redis->set($reds_key, json_encode($rows)); |
||||
|
} |
||||
|
|
||||
|
public function initContractSetting() |
||||
|
{ |
||||
|
$list = ContractSettingModel::getSettingList(); |
||||
|
$redis_key = "contract_time_setting"; |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($redis_key); |
||||
|
$redis->set($redis_key, json_encode($list, JSON_NUMERIC_CHECK)); |
||||
|
} |
||||
|
|
||||
|
// 合约自发行情缓存 |
||||
|
public function initContractMarketData() |
||||
|
{ |
||||
|
|
||||
|
$now = date('Y-m-d H:i:s'); |
||||
|
$list = ContractMarketModel::where('type', 1) |
||||
|
->whereTime('begin_time', '>', $now) |
||||
|
->field('trade_name as selfContractCode,end_time as endTime,max_price as maxPrice') |
||||
|
->order('id', 'desc') |
||||
|
->select(); |
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
|
||||
|
$key = "contract_market_setting"; |
||||
|
$this->redis->set($key, json_encode($rows)); |
||||
|
} |
||||
|
|
||||
|
public function getBrokerageKey($type) |
||||
|
{ |
||||
|
switch ($type) { |
||||
|
case 1: |
||||
|
//平仓返佣 |
||||
|
$brokerage_key = 'BROKERAGE:SALE:SETTING'; |
||||
|
break; |
||||
|
case 2: |
||||
|
//开仓返佣 |
||||
|
$brokerage_key = 'BROKERAGE:BUY:SETTING'; |
||||
|
break; |
||||
|
default: |
||||
|
//注册返佣 |
||||
|
$brokerage_key = 'BROKERAGE:REG:SETTING'; |
||||
|
break; |
||||
|
} |
||||
|
return $brokerage_key; |
||||
|
} |
||||
|
|
||||
|
public function getTradeFeeKey($market_type) |
||||
|
{ |
||||
|
switch ($market_type) { |
||||
|
case 1: |
||||
|
$fee_key = 'TRADE:FEE:DIGITAL'; |
||||
|
break; |
||||
|
case 2: |
||||
|
$fee_key = 'TRADE:FEE:CONTRACT'; |
||||
|
break; |
||||
|
case 3: |
||||
|
$fee_key = 'TRADE:FEE:US_STOCK'; |
||||
|
break; |
||||
|
case 4: |
||||
|
$fee_key = 'TRADE:FEE:IDN_STOCK'; |
||||
|
break; |
||||
|
case 5: |
||||
|
$fee_key = 'TRADE:FEE:MYS_STOCK'; |
||||
|
break; |
||||
|
case 6: |
||||
|
$fee_key = 'TRADE:FEE:THA_STOCK'; |
||||
|
break; |
||||
|
case 7: |
||||
|
$fee_key = 'TRADE:FEE:IN_STOCK'; |
||||
|
break; |
||||
|
case 8: |
||||
|
$fee_key = 'TRADE:FEE:CONTRACT_SEC'; |
||||
|
break; |
||||
|
case 9: |
||||
|
$fee_key = 'TRADE:FEE:SGD_STOCK'; |
||||
|
break; |
||||
|
case 12: |
||||
|
$fee_key = 'TRADE:FEE:HK_STOCK'; |
||||
|
break; |
||||
|
case 14: |
||||
|
$fee_key = 'TRADE:FEE:UK_STOCK'; |
||||
|
break; |
||||
|
case 15: |
||||
|
$fee_key = 'TRADE:FEE:FUR_STOCK'; |
||||
|
break; |
||||
|
case 16: |
||||
|
$fee_key = 'TRADE:FEE:EUR_STOCK'; |
||||
|
break; |
||||
|
case 17: |
||||
|
$fee_key = 'TRADE:FEE:BR_STOCK'; |
||||
|
break; |
||||
|
case 18: |
||||
|
$fee_key = 'TRADE:FEE:JP_STOCK'; |
||||
|
break; |
||||
|
case 19: |
||||
|
$fee_key = 'TRADE:FEE:FOREX'; |
||||
|
break; |
||||
|
default: |
||||
|
$fee_key = ''; |
||||
|
break; |
||||
|
} |
||||
|
return $fee_key; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @param $menus |
||||
|
* @param $pid |
||||
|
* @param $showParentName |
||||
|
* @return array|string |
||||
|
*/ |
||||
|
function getTreeMenu($menus, $pid = 0, $showParentName = false) |
||||
|
{ |
||||
|
$arr = []; |
||||
|
if (empty($menus)) { |
||||
|
return ''; |
||||
|
} |
||||
|
if ($showParentName) { |
||||
|
for ($i = 0; $i < count($menus); $i++) { |
||||
|
$parentId = $menus[$i]['pid']; |
||||
|
if ($parentId == '0') { |
||||
|
$menus[$i]['parent_name'] = ""; |
||||
|
} else { |
||||
|
$parent = array_filter($menus, function ($item) use ($parentId) { |
||||
|
return $item['id'] == $parentId; |
||||
|
}); |
||||
|
|
||||
|
if ($parent) { |
||||
|
$parent = array_values($parent); |
||||
|
if ($parent[0]['name']) { |
||||
|
$menus[$i]['parent_name'] = $parent[0]['name']; |
||||
|
} else if ($parent[0]['title']) { |
||||
|
$menus[$i]['parent_name'] = $parent[0]['title']; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
foreach ($menus as $key => $value) { |
||||
|
if ($value['pid'] == $pid) { |
||||
|
$children = $this->getTreeMenu($menus, $value['id']); |
||||
|
if (!empty($children)) { |
||||
|
$value['children'] = $children; |
||||
|
} |
||||
|
//pid=0为顶级菜单,前端不显示 |
||||
|
if ($pid == '0') { |
||||
|
unset($value['pid']); |
||||
|
} |
||||
|
$arr[] = $value; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $arr; |
||||
|
} |
||||
|
|
||||
|
function getSortTreeMenu($menus, $sort = 'order', $pid = 0) |
||||
|
{ |
||||
|
$menuList = getTreeMenu($menus, $pid = 0); |
||||
|
foreach ($menuList as $key => $value) { |
||||
|
if (!empty($value['children'])) { |
||||
|
$sort = array_column($value['children'], $sort); |
||||
|
array_multisort($sort, SORT_DESC, $value['children']); |
||||
|
} |
||||
|
} |
||||
|
return $menuList; |
||||
|
} |
||||
|
|
||||
|
// 给 go 行情 发送 新增的股票 |
||||
|
public function sendNewStockToGo($country, $newStockCode, $oldStockCode, $stockName, $tape, $price = 0, $isReal = 1, $intro = '', $source = 0, $numericCode = 0) |
||||
|
{ |
||||
|
try { |
||||
|
switch ($country) { |
||||
|
case 'India': |
||||
|
case 'Thailand': |
||||
|
case 'US': |
||||
|
case 'HongKong': |
||||
|
$price = bcadd($price, 0, 2); |
||||
|
break; |
||||
|
case 'Indonesia': |
||||
|
$price = bcadd($price, 0, 0); |
||||
|
break; |
||||
|
case 'Malaysia': |
||||
|
$price = bcadd($price, 0, 3); |
||||
|
break; |
||||
|
default: |
||||
|
$price = bcadd($price, 0, 2); |
||||
|
} |
||||
|
|
||||
|
$responseArr = [ |
||||
|
'new_ticker' => $newStockCode, //旧的股票代码 (新增的话 ,两个字段都是一样的值) |
||||
|
'locale' => $country, //国家 |
||||
|
'yesterday_close' => $price, //价格 |
||||
|
'name' => $stockName, //股票name |
||||
|
'primary_exchange' => $tape, //交易所 |
||||
|
'is_real' => $isReal, //1正式股票 2测试股票 |
||||
|
'intro' => $intro //股票简介 |
||||
|
]; |
||||
|
|
||||
|
if ($source > 0) { |
||||
|
$responseArr['source'] = $source; |
||||
|
} |
||||
|
|
||||
|
if ($country == 'Malaysia') { |
||||
|
$responseArr['numeric_code'] = $numericCode . ''; |
||||
|
} |
||||
|
|
||||
|
$client = new Client(); |
||||
|
$url = env('QUOTE.BASE_URL') . '/spots/list/new/add'; |
||||
|
$response = $client->request("POST", $url, [ |
||||
|
'json' => $responseArr |
||||
|
]); |
||||
|
|
||||
|
$body = $response->getBody()->getContents(); |
||||
|
$res = json_decode($body, true); |
||||
|
|
||||
|
$responseArr['url'] = $url; |
||||
|
trace('---给行情推送数据---' . json_encode([$res, $responseArr]), 'error'); |
||||
|
|
||||
|
if (isset($res['code']) && $res['code'] == 200) { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
trace('---给行情推送数据异常---' . json_encode([$res, $responseArr]), 'error'); |
||||
|
return false; |
||||
|
} catch (\Exception $exception) { |
||||
|
trace('---给行情推送数据异常1---' . $exception->getMessage(), 'error'); |
||||
|
|
||||
|
} catch (GuzzleException $e) { |
||||
|
trace('---给行情推送数据异常2---' . $e->getMessage(), 'error'); |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// 给 go 行情 发送股票小数位数 |
||||
|
public function sendDecimalToGo($country, $stockCode, int $decimal) |
||||
|
{ |
||||
|
try { |
||||
|
$client = new Client(); |
||||
|
$url = env('QUOTE.BASE_URL') . '/spots/update/keep'; |
||||
|
$response = $client->request("POST", $url, [ |
||||
|
'json' => [ |
||||
|
'currency' => $country, |
||||
|
'stockCode' => $stockCode, |
||||
|
'keepDecimal' => $decimal, |
||||
|
], |
||||
|
]); |
||||
|
|
||||
|
$body = $response->getBody()->getContents(); |
||||
|
$res = json_decode($body, true); |
||||
|
if (isset($res['code']) && $res['code'] == 200) { |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
Log::error('给行情推送数据异常 ' . json_encode([$res])); |
||||
|
return false; |
||||
|
} catch (\Exception $exception) { |
||||
|
Log::error('给行情推送数据异常1 ' . $exception->getMessage()); |
||||
|
} catch (GuzzleException $e) { |
||||
|
Log::error('给行情推送数据异常2 ' . $e->getMessage()); |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// 给 go 交易 发送股票小数位数 // $preStockId $marketType $stockCode |
||||
|
public function sendStockToGo($preStockId, $stockCode, $marketType) |
||||
|
{ |
||||
|
try { |
||||
|
$marketType = $marketType + 0; // 转成数字 |
||||
|
$preStockId = $preStockId . ''; |
||||
|
$client = new Client(); |
||||
|
$url = env('QUOTE.DEAL_BASE_URL') . '/order_sharepre/share_pre_trade'; |
||||
|
$response = $client->request("POST", $url, [ |
||||
|
'json' => [ |
||||
|
'code' => $stockCode, |
||||
|
'id' => $preStockId, |
||||
|
'stock' => $marketType, |
||||
|
], |
||||
|
]); |
||||
|
|
||||
|
$body = $response->getBody()->getContents(); |
||||
|
$res = json_decode($body, true); |
||||
|
|
||||
|
trace('---给交易推送数据---' . json_encode([$res, [ |
||||
|
'url' => $url, |
||||
|
'code' => $stockCode, |
||||
|
'id' => $preStockId, |
||||
|
'stock' => $marketType,]]), 'error'); |
||||
|
if (isset($res['code']) && $res['code'] == 200) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} catch (\Exception $exception) { |
||||
|
trace('---通知交易异常1---' . $exception->getMessage(), 'error'); |
||||
|
} catch (GuzzleException $e) { |
||||
|
trace('---通知交易异常1---' . $e->getMessage(), 'error'); |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
public function sendStockToTrade($order_no, $stockCode, $marketType) |
||||
|
{ |
||||
|
try { |
||||
|
$marketType = $marketType + 0; // 转成数字 |
||||
|
$order_no = $order_no . ''; |
||||
|
$client = new Client(); |
||||
|
$url = env('QUOTE.DEAL_BASE_URL') . '/order_sharepre/share_pre_trade_by_order_no'; |
||||
|
$response = $client->request("POST", $url, [ |
||||
|
'json' => [ |
||||
|
'code' => $stockCode, |
||||
|
'id' => $order_no, |
||||
|
'stock' => $marketType, |
||||
|
], |
||||
|
]); |
||||
|
|
||||
|
$body = $response->getBody()->getContents(); |
||||
|
$res = json_decode($body, true); |
||||
|
|
||||
|
trace('---单个订单给交易推送数据---' . json_encode([$res, [ |
||||
|
'url' => $url, |
||||
|
'code' => $stockCode, |
||||
|
'id' => $order_no, |
||||
|
'stock' => $marketType,]]), 'error'); |
||||
|
if (isset($res['code']) && $res['code'] == 200) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} catch (\Exception $exception) { |
||||
|
trace('---通知交易异常1---' . $exception->getMessage(), 'error'); |
||||
|
} catch (GuzzleException $e) { |
||||
|
trace('---通知交易异常1---' . $e->getMessage(), 'error'); |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
public function sendUpdateCodeGo($newCode, $oldCode, $marketType) |
||||
|
{ |
||||
|
try { |
||||
|
$marketType = $marketType + 0; // 转成数字 |
||||
|
$client = new Client(); |
||||
|
$url = env('QUOTE.DEAL_BASE_URL') . '/order_sharepre/update_stock_id'; |
||||
|
$response = $client->request("POST", $url, [ |
||||
|
'json' => [ |
||||
|
'code' => $newCode, |
||||
|
'codeOld' => $oldCode, |
||||
|
'stock' => $marketType, |
||||
|
], |
||||
|
]); |
||||
|
|
||||
|
$body = $response->getBody()->getContents(); |
||||
|
$res = json_decode($body, true); |
||||
|
|
||||
|
if (isset($res['code']) && $res['code'] == 200) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} catch (\Exception $exception) { |
||||
|
Log::error('给行情推送数据异常1 ' . $exception->getMessage()); |
||||
|
} catch (GuzzleException $e) { |
||||
|
Log::error('给行情推送数据异常2 ' . $e->getMessage()); |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 给go推送股票指数代码 |
||||
|
* @param $code |
||||
|
* @param $country |
||||
|
* @param $sort |
||||
|
* @param $status |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function sendStockIndexToGo($code, $country, $sort, $status) |
||||
|
{ |
||||
|
try { |
||||
|
$client = new Client(); |
||||
|
$url = env('QUOTE.BASE_URL') . '/spots/index/list/new/add'; |
||||
|
$response = $client->request("POST", $url, [ |
||||
|
'json' => [ |
||||
|
'ticker' => $code, |
||||
|
'state' => $status, |
||||
|
'sort' => $sort, |
||||
|
], |
||||
|
]); |
||||
|
|
||||
|
$body = $response->getBody()->getContents(); |
||||
|
$res = json_decode($body, true); |
||||
|
|
||||
|
Log::info('给交易推送数据 ' . json_encode([$res, [ |
||||
|
'url' => $url, |
||||
|
'ticker' => $code, |
||||
|
'locale' => $country, |
||||
|
'state' => $status, |
||||
|
'sort' => $sort, |
||||
|
]])); |
||||
|
|
||||
|
|
||||
|
if (isset($res['code']) && $res['code'] == 200) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} catch (\Exception $exception) { |
||||
|
Log::error('给行情推送股票指数数据异常1 ' . $exception->getMessage()); |
||||
|
} catch (GuzzleException $e) { |
||||
|
Log::error('给行情推送股票指数数据异常2 ' . $e->getMessage()); |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,362 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
|
||||
|
use app\admin\validate\AdminValidate; |
||||
|
use app\home\service\BaseHomeService; |
||||
|
use app\model\AdminLogModel; |
||||
|
use app\model\AdminModel; |
||||
|
use app\model\AuthRoleModel; |
||||
|
use phpDocumentor\Reflection\Type; |
||||
|
use think\exception\ValidateException; |
||||
|
use app\utility\UnqId; |
||||
|
use function Sodium\compare; |
||||
|
use think\facade\Request; |
||||
|
|
||||
|
|
||||
|
class AdminService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function addUser($param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(AdminValidate::class)->scene('addUser')->check($param); |
||||
|
// 查找用户是否存在 |
||||
|
$username = $param['user_name']; |
||||
|
$user = AdminModel::getByUserName($username); |
||||
|
if (!empty($user)) { |
||||
|
return $this->toData('200100', '该用户已存在', []); |
||||
|
} |
||||
|
$param['password'] = (new UnqId())->encryptPassword($param['password'], env('ENCRYPT.ADMINSALT')); |
||||
|
$param['invite_code'] = (new BaseHomeService())->getUniqInviteCode(); |
||||
|
|
||||
|
AdminModel::create($param); |
||||
|
return $this->toData('0', '添加成功.', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('100400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', '系统繁忙.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取用户列表 |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function getUserList($param) |
||||
|
{ |
||||
|
try { |
||||
|
$adminModel = new AdminModel(); |
||||
|
//查询条件 |
||||
|
if (isset($param['user_name']) && !empty($param['user_name'])) { |
||||
|
$adminModel = $adminModel->where('user_name', $param['user_name']); |
||||
|
} |
||||
|
if (isset($param['nick_name']) && !empty($param['nick_name'])) { |
||||
|
$adminModel = $adminModel->where('nick_name', $param['nick_name']); |
||||
|
} |
||||
|
|
||||
|
// 总数 |
||||
|
$total = $adminModel->count(); |
||||
|
$list = $adminModel->withoutField('password,token')->order('id', 'asc')->page($param['page'], $param['limit'])->select()->toArray(); |
||||
|
$roleIds = array_column($list, "role_id"); |
||||
|
$roleList = AuthRoleModel::where('id', 'in', $roleIds)->field('id,name')->select()->toArray(); |
||||
|
$host = Request::host(); |
||||
|
$host = str_replace('api.', '', $host); |
||||
|
if (!empty($list)) { |
||||
|
for ($i = 0; $i < count($list); $i++) { |
||||
|
$index = array_search($list[$i]['role_id'], array_column($roleList, 'id')); |
||||
|
|
||||
|
if ($index !== false) { |
||||
|
$list[$i]['role_name'] = $roleList[$index]['name']; |
||||
|
} |
||||
|
|
||||
|
$list[$i]['url'] = $host . '/register/index?=agent_code='.$list[$i]['invite_code']; |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $list]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @desc 获取用户信息 |
||||
|
* @param $userId |
||||
|
* @return array |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\DbException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
*/ |
||||
|
public function getUserInfo($userId) |
||||
|
{ |
||||
|
|
||||
|
try { |
||||
|
if (empty($userId) || $userId <= 0) { |
||||
|
return $this->toData('100403', 'Please log in first', []); |
||||
|
} |
||||
|
$info = AdminModel::find($userId); |
||||
|
|
||||
|
if (empty($info)) { |
||||
|
return $this->toData('100400', 'The user does not exist.', []); |
||||
|
} |
||||
|
// 返回数据 |
||||
|
return $this->toData('0', 'Modification successful.', $info->toArray()); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* @desc 设置用户信息 |
||||
|
* @param $userId |
||||
|
* @param $param |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function updateInfo($userId, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if (empty($userId) || $userId <= 0) { |
||||
|
return $this->toData('200403', 'Please log in first.', []); |
||||
|
} |
||||
|
// 参数校验 |
||||
|
validate(AdminValidate::class)->scene('updateInfo')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$user = AdminModel::find($userId); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('200403', 'Please log in first.', []); |
||||
|
} |
||||
|
|
||||
|
$user['nick_name'] = $param['nick_name']; |
||||
|
$user['email'] = $param['email']; |
||||
|
$user['mobile'] = isset($param['mobile']) ? $param['mobile'] : null; |
||||
|
$user['desc'] = isset($param['desc']) ? $param['mobile'] : null; |
||||
|
$user->save(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 编辑账号信息 |
||||
|
* @param $accountId |
||||
|
* @param $param |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function updateAccount($accountId, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if (empty($accountId) || $accountId <= 0) { |
||||
|
return $this->toData('200404', 'accountId lose.', []); |
||||
|
} |
||||
|
// 参数校验 |
||||
|
validate(AdminValidate::class)->scene('updateAccount')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$user = AdminModel::find($accountId); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('200403', '不存在该用户.', []); |
||||
|
} |
||||
|
if (isset($param['password'])) { |
||||
|
$user['password'] = (new UnqId())->encryptPassword($param['password'], env('ENCRYPT.ADMINSALT')); |
||||
|
} |
||||
|
$user['role_id'] = $param['role_id']; |
||||
|
$user['user_name'] = $param['user_name']; |
||||
|
$user['nick_name'] = $param['nick_name']; |
||||
|
$user['email'] = isset($param['email']) ? $param['email'] : null; |
||||
|
$user['remark'] = isset($param['remark']) ? $param['remark'] : null; |
||||
|
$user->save(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function updateAccountStauts($accountId, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if (empty($accountId) || $accountId <= 0) { |
||||
|
return $this->toData('200404', 'accountId lose.', []); |
||||
|
} |
||||
|
// 参数校验 |
||||
|
validate(AdminValidate::class)->scene('updateAccountStatus')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$user = AdminModel::find($accountId); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('200403', 'Please log in first.', []); |
||||
|
} |
||||
|
$user['status'] = $param['status']; |
||||
|
$user->save(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function updatePassword($userId, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if (empty($userId) || $userId <= 0) { |
||||
|
return $this->toData('200403', 'Please log in first.', []); |
||||
|
} |
||||
|
|
||||
|
// 参数校验 |
||||
|
validate(AdminValidate::class)->scene('updatePassword')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$user = AdminModel::find($userId); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('200403', 'Please log in first.', []); |
||||
|
} |
||||
|
//检查原始密码 |
||||
|
$flag = (new UnqId())->checkPassword($param['old_password'], $user['password'], env('ENCRYPT.ADMINSALT')); |
||||
|
if (!$flag) { |
||||
|
return $this->toData('200401', '原始密码错误', []); |
||||
|
} |
||||
|
//设置新密码 |
||||
|
$newPassword = (new UnqId())->encryptPassword($param['new_password'], env('ENCRYPT.ADMINSALT')); |
||||
|
$user['password'] = $newPassword; |
||||
|
$user->save(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function del($id): array |
||||
|
{ |
||||
|
try { |
||||
|
$adminModel = AdminModel::find($id); |
||||
|
$adminModel->delete(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询用户权限代码 |
||||
|
* @param $id |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function getPermCode($id): array |
||||
|
{ |
||||
|
try { |
||||
|
$adminModel = AdminModel::find($id); |
||||
|
//根据角色查询权限代码 |
||||
|
$roleModel = AuthRoleModel::find($adminModel->role_id); |
||||
|
$rules = $roleModel->rules; |
||||
|
if ($rules) { |
||||
|
$rules = explode(",", $rules); |
||||
|
//字符串转换为数字类型 |
||||
|
// $rules=array_map(function ($value){ |
||||
|
// return (int)$value; |
||||
|
// },$rules); |
||||
|
} |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', $rules); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* @desc 退出登陆 |
||||
|
* @param $userId |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function logout($userId) |
||||
|
{ |
||||
|
try { |
||||
|
// 获取用户 |
||||
|
$user = AdminModel::find($userId); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('200300', '用户不存在', []); |
||||
|
} |
||||
|
$user->token = ""; |
||||
|
$user->save(); |
||||
|
return $this->toData('0', 'Modification successful.'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function logList($param) |
||||
|
{ |
||||
|
try { |
||||
|
$adminLogModel = new AdminLogModel(); |
||||
|
//查询条件 |
||||
|
if (!empty($param['create_date'])) { |
||||
|
$adminLogModel = $adminLogModel->where('create_date', $param['create_date']); |
||||
|
} |
||||
|
|
||||
|
// 总数 |
||||
|
$total = $adminLogModel->count(); |
||||
|
$list = $adminLogModel->order('id', 'desc')->page($param['page'], $param['limit'])->select()->toArray(); |
||||
|
$accountIds = array_column($list, "admin_id"); |
||||
|
$accountList = AdminModel::where('id', 'in', $accountIds)->column('user_name', 'id'); |
||||
|
// $menuList = AuthRuleModel::column('title', 'path'); |
||||
|
if (!empty($list)) { |
||||
|
foreach ($list as &$v) { |
||||
|
$v['admin_name'] = $accountList[$v['admin_id']] ?? '-'; |
||||
|
$v['path_text'] = '用户上分'; |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $list]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function inviteCode() |
||||
|
{ |
||||
|
try { |
||||
|
$user = AdminModel::select(); |
||||
|
foreach ($user as $v){ |
||||
|
$inviteCode = (new BaseHomeService())->getUniqInviteCode(); |
||||
|
AdminModel::where('id',$v->id)->update(['invite_code'=>$inviteCode]); |
||||
|
} |
||||
|
|
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,154 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
|
||||
|
use app\model\AdminModel; |
||||
|
use app\model\AuthGroupAccessModel; |
||||
|
use app\model\UserModel; |
||||
|
|
||||
|
class AgentService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
// 代理列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
// $agentUserId = env('AGENT.AGENT_GROUP_ID'); |
||||
|
// $agentAdminUserIds = AuthGroupAccessModel::where('group_id', $agentUserId)->column('uid'); |
||||
|
$roleId = 10; |
||||
|
$agentAdminUser = AdminModel::where('role_id', 'in', $roleId)->field('id,user_name,nick_name,email,mobile,status,invite_code')->select(); |
||||
|
$rows = []; |
||||
|
if (!$agentAdminUser->isEmpty()) { |
||||
|
foreach ($agentAdminUser as $item) { |
||||
|
$rows[] = [ |
||||
|
'id' => $item['id'], |
||||
|
'username' => $item['user_name'], |
||||
|
'nickname' => $item['nick_name'], |
||||
|
'email' => $item['email'] ?? '-', |
||||
|
'mobile' => $item['mobile'] ?? '-', |
||||
|
'status' => $item['status'], |
||||
|
'invite_code' => $item['invite_code'], |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 代理用户 |
||||
|
public function user($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['agent_id'])) { |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => []]); |
||||
|
} |
||||
|
|
||||
|
$userList = UserModel::where('agent_id', 'in', [0, $param['agent_id']])->where('parent_id', 0) |
||||
|
->order('user_id', 'desc') |
||||
|
->select(); |
||||
|
$rows = []; |
||||
|
if (!$userList->isEmpty()) { |
||||
|
foreach ($userList as $item) { |
||||
|
$rows[] = [ |
||||
|
'id' => $item['user_id'], |
||||
|
'email' => $item['email'], |
||||
|
'user_no' => $item['user_no'], |
||||
|
'status' => $item['agent_id'] == $param['agent_id'], |
||||
|
'agent_id' => $param['agent_id'], |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function manager($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '参错错误', ['list' => []]); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['agent_id']) || !is_numeric($param['agent_id'])) { |
||||
|
return $this->toData('1', '参错错误', ['list' => []]); |
||||
|
} |
||||
|
|
||||
|
$user = UserModel::where('user_id', $param['id'])->find(); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('1', '用户不存在', ['list' => []]); |
||||
|
} |
||||
|
|
||||
|
if ($user['parent_id'] != 0) { |
||||
|
return $this->toData('1', '只能绑定顶层用户', ['list' => []]); |
||||
|
} |
||||
|
|
||||
|
// 判断代理是否有效 |
||||
|
$admin = AdminModel::where('id', $param['agent_id'])->find(); |
||||
|
$roleId = 10; |
||||
|
if (empty($admin) || $admin['role_id'] != $roleId) { |
||||
|
return $this->toData('1', '代理不存在', ['list' => []]); |
||||
|
} |
||||
|
|
||||
|
// $agentUserId = env('AGENT.AGENT_GROUP_ID'); |
||||
|
// $agentAdminUserIds = AuthGroupAccessModel::where('group_id', $agentUserId)->column('uid'); |
||||
|
// if(!in_array($param['agent_id'], $agentAdminUserIds)){ |
||||
|
// return $this->toData('1', '代理不存在', ['list' => []]); |
||||
|
// } |
||||
|
|
||||
|
// 未绑定 直接绑定 |
||||
|
if ($user->agent_id == 0) { |
||||
|
UserModel::update(['agent_id' => $param['agent_id']], ['user_id' => $param['id']]); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} |
||||
|
|
||||
|
// 取消绑定 |
||||
|
if ($user->agent_id == $param['agent_id']) { |
||||
|
UserModel::update(['agent_id' => 0], ['user_id' => $param['id']]); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('1', '该用户已被其他代理绑定, 请先取消绑定', []); |
||||
|
|
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function addUser($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['agent_id']) || !is_numeric($param['agent_id'])) { |
||||
|
return $this->toData('1', '参错错误'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['user_id']) || !is_numeric($param['user_id'])) { |
||||
|
return $this->toData('1', '参错错误'); |
||||
|
} |
||||
|
|
||||
|
$user = UserModel::where('user_id', $param['user_id'])->find(); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('1', '用户不存在'); |
||||
|
} |
||||
|
|
||||
|
if ($user['parent_id'] != 0) { |
||||
|
return $this->toData('1', '只能绑定顶层用户'); |
||||
|
} |
||||
|
|
||||
|
// 判断代理是否有效 |
||||
|
$admin = AdminModel::where('id', $param['agent_id'])->find(); |
||||
|
$roleId = 10; |
||||
|
if (empty($admin) || $admin['role_id'] != $roleId) { |
||||
|
return $this->toData('1', '代理不存在'); |
||||
|
} |
||||
|
|
||||
|
UserModel::update(['agent_id' => $param['agent_id']], ['user_id' => $param['user_id']]); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,100 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
use app\admin\validate\LoginValidate; |
||||
|
use app\model\AdminModel; |
||||
|
use app\model\AuthRoleModel; |
||||
|
use app\utility\Jwt; |
||||
|
use app\utility\UnqId; |
||||
|
use think\exception\ValidateException; |
||||
|
use think\facade\Cache; |
||||
|
use think\Log; |
||||
|
|
||||
|
|
||||
|
class LoginService extends AdminBaseService |
||||
|
{ |
||||
|
/** |
||||
|
* @desc 账号密码登陆 |
||||
|
* @param $param |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function login($param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(LoginValidate::class)->scene('login')->check($param); |
||||
|
|
||||
|
// 获取用户 |
||||
|
$info = AdminModel::getByUserName($param['user_name']); |
||||
|
if(empty($info)){ |
||||
|
return $this->toData('200300', 'Incorrect account or password.1', []); |
||||
|
} |
||||
|
if($info->status!==1){ |
||||
|
return $this->toData('200300', '该账户已被禁用', []); |
||||
|
} |
||||
|
//查看角色状态 |
||||
|
$role=AuthRoleModel::find($info->role_id); |
||||
|
if(!$role||$role->status!==1){ |
||||
|
return $this->toData('200300', '该账户所在的群组已被禁用', []); |
||||
|
} |
||||
|
// 校验密码 |
||||
|
$checkPasswordBool = (new UnqId())->checkPassword($param['password'], $info->password,env('ENCRYPT.ADMINSALT')); |
||||
|
|
||||
|
if(!$checkPasswordBool){ |
||||
|
return $this->toData('200300', 'Incorrect account or password.3', []); |
||||
|
} |
||||
|
$token = (new Jwt())->generateToken($info->id); |
||||
|
|
||||
|
if(empty($token)){ |
||||
|
return $this->toData('200400', 'The system is busy. Please try again later.1', []); |
||||
|
} |
||||
|
|
||||
|
//保存token |
||||
|
$info->token=$token; |
||||
|
$info->save(); |
||||
|
|
||||
|
// $key = 'TOKEN:USER:'.$token; |
||||
|
// $expired = 3600*24; |
||||
|
// Cache::store('redis')->set($key, 9999999999, $expired); |
||||
|
|
||||
|
$info=$info->toArray(); |
||||
|
$this->setUserTokenCache($token, $info['id']); |
||||
|
|
||||
|
// 返回结果以及用户信息 |
||||
|
return $this->toData('0', 'Request successful.', [ |
||||
|
'id' => $info['id'], |
||||
|
'nickname' => $info['nick_name'], |
||||
|
'email' => $info['email'], |
||||
|
'token' => $token, |
||||
|
]); |
||||
|
}catch (ValidateException $validateException) { |
||||
|
// 参数校验失败 异常类 |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('100400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
|
||||
|
return $this->toData('200500', 'The system is busy. Please try again later.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function setUserTokenCache($token, $userId) |
||||
|
{ |
||||
|
// 清除之前的token 设置新的token |
||||
|
$userTokenKey = 'USER:TOKEN:'.$userId; // 根据用户id 查找token |
||||
|
$oldToken = Cache::store('redis')->get($userTokenKey); |
||||
|
if($oldToken){ |
||||
|
$oldTokenKey = 'TOKEN:USER:'.$oldToken; |
||||
|
Cache::store('redis')->delete($oldTokenKey); |
||||
|
} |
||||
|
|
||||
|
//trace('---设置用户登陆凭证--'.$userId.'----'.$token, 'error'); |
||||
|
|
||||
|
$tokenKey = 'TOKEN:USER:'.$token; // 根据token查找用户id |
||||
|
$expired = 30 * 24 * 60 * 60; |
||||
|
// 由中间件自动续期 |
||||
|
Cache::store('redis')->set($tokenKey, $userId, $expired); |
||||
|
Cache::store('redis')->set($userTokenKey, $token, $expired); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,176 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
|
||||
|
use app\admin\validate\RechargeValidate; |
||||
|
use app\model\AdminModel; |
||||
|
use app\model\FileModel; |
||||
|
use app\model\PaymentListModel; |
||||
|
use app\model\RechargeApplyModel; |
||||
|
use app\model\UserModel; |
||||
|
|
||||
|
class RechargeService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(RechargeValidate::class)->scene('index')->check($param); |
||||
|
$where = []; |
||||
|
$userId = 0; |
||||
|
// 用户号精确搜索 |
||||
|
if (!empty($param['user_no'])) { |
||||
|
$user = UserModel::where('user_no', $param['user_no'])->find(); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], ]); |
||||
|
} |
||||
|
$userId = $user['user_id']; |
||||
|
} |
||||
|
$statusList = RechargeApplyModel::$statusList; |
||||
|
// 判断是否是代理 如果是代理 只能看他自己管理的用户 |
||||
|
$whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($whereU)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extend' => $statusList]); |
||||
|
} |
||||
|
// 订单号 |
||||
|
if (!empty($param['order_id'])) { |
||||
|
$where['order_no'] = $param['order_id']; |
||||
|
} |
||||
|
if (isset($param['is_online'])) { |
||||
|
$where['is_online'] = $param['is_online']; |
||||
|
if ($param['is_online'] == 1) $statusList[0] = '用户取消'; |
||||
|
} |
||||
|
|
||||
|
if (isset($param['status'])) { |
||||
|
$where['status'] = $param['status']; |
||||
|
} |
||||
|
|
||||
|
if (!empty($param['start_time']) && !empty($param['end_time'])) { |
||||
|
$where['update_time'] = ['between time', [$param['start_time'], $param['end_time']]]; |
||||
|
} |
||||
|
|
||||
|
// 列表 |
||||
|
$list = RechargeApplyModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); |
||||
|
// 总数 |
||||
|
$total = RechargeApplyModel::where($where)->where($whereU)->count(); |
||||
|
// 统计 充值成功 |
||||
|
$sum = RechargeApplyModel::where($where)->where($whereU)->where('status', 1)->sum('recharge_num'); |
||||
|
|
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
// 获取用户号 |
||||
|
$userIdArr = []; |
||||
|
foreach ($list as $idItem) { |
||||
|
$userIdArr[] = $idItem['user_id']; |
||||
|
} |
||||
|
$userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); |
||||
|
$rows = $list->toArray(); |
||||
|
foreach ($rows as $key => $item) { |
||||
|
$rows[$key]['status_text'] = $statusList[$item['status']]; |
||||
|
$rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号 |
||||
|
$rows[$key]['order_id'] = $item['order_no']; |
||||
|
$rows[$key]['recharge_channel'] = PaymentListModel::where('id', $item['recharge_channel'])->value('channel'); |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'sum' => $sum . 'USD', 'extend' => $statusList]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function info($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(RechargeValidate::class)->scene('info')->check($param); |
||||
|
$where = [ |
||||
|
'id' => $param['id'] |
||||
|
]; |
||||
|
|
||||
|
$userId = 0; |
||||
|
$where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($where)) { |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} |
||||
|
|
||||
|
$info = RechargeApplyModel::getOrderInfo($where); |
||||
|
if ($info['file_id']) { |
||||
|
$info['file_url'] = FileModel::getFilePath($info['file_id']); |
||||
|
} |
||||
|
$payment_info = PaymentListModel::getPaymentInfo([ |
||||
|
'id' => $info['recharge_channel'] |
||||
|
]); |
||||
|
if ($payment_info) { |
||||
|
$info['recharge_channel'] = !isset($payment_info['channel']) ? $payment_info['channel'] : $info['recharge_channel']; |
||||
|
$info['bank_name'] = !isset($payment_info['bank_name']) ? $payment_info['bank_name'] : ''; |
||||
|
$info['bank_branch'] = !isset($payment_info['bank_branch']) ? $payment_info['bank_branch'] : ''; |
||||
|
$info['bank_user'] = !isset($payment_info['bank_user']) ? $payment_info['bank_user'] : ''; |
||||
|
$info['bank_account'] = !isset($payment_info['bank_account']) ? $payment_info['bank_account'] : ''; |
||||
|
$info['wallet_address'] = !isset($payment_info['wallet_address']) ? $payment_info['wallet_address'] : ''; |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', $info); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function check($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(RechargeValidate::class)->scene('info')->check($param); |
||||
|
$isAgent = AdminModel::checkUserIsAgent($adminId); |
||||
|
if ($isAgent) { |
||||
|
return $this->toData('10040', '代理无权限操作'); |
||||
|
} |
||||
|
$where = [ |
||||
|
'id' => $param['id'] |
||||
|
]; |
||||
|
$userId = 0; |
||||
|
$where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($where)) { |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} |
||||
|
$info = RechargeApplyModel::getOrderInfo($where); |
||||
|
if ($info) { |
||||
|
if ($info['is_online'] == 1){ |
||||
|
return $this->toData('10040', '在线充值 不可操作'); |
||||
|
} |
||||
|
|
||||
|
if ($info['is_check'] == 0) { |
||||
|
if ($param['check_status'] == 1) { |
||||
|
$result = $this->updateUserAsset($info['user_id'], $info['account_type'], 1, $info['market_amount'], 0, $info['order_no']); |
||||
|
if ($result['status'] == 200) { |
||||
|
RechargeApplyModel::where('id', $info['id'])->update([ |
||||
|
'is_check' => 1, |
||||
|
'status' => 1, |
||||
|
'deal_time' => date('Y-m-d H:i:s') |
||||
|
]); |
||||
|
} else { |
||||
|
return $this->toData('1015', '系统异常 请稍后重试'); |
||||
|
} |
||||
|
} else { |
||||
|
RechargeApplyModel::where('id', $info['id'])->update([ |
||||
|
'is_check' => 2, |
||||
|
'status' => 2 |
||||
|
]); |
||||
|
} |
||||
|
} |
||||
|
if ($info['file_id']) { |
||||
|
$info['file_url'] = FileModel::getFilePath($info['file_id']); |
||||
|
$file = dirname(dirname(dirname(__DIR__))) . "/public" . $info['file_url']; |
||||
|
@unlink($file); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} else { |
||||
|
return $this->toData('1', '参数错误', []); |
||||
|
} |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,139 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\VoteModel; |
||||
|
|
||||
|
class VoteService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index($param) |
||||
|
{ |
||||
|
try { |
||||
|
$vote = VoteModel::where('is_delete', VoteModel::IS_DELETE_NO) |
||||
|
->order('id', 'desc'); |
||||
|
$total = $vote->count(); |
||||
|
$list = $vote->page($param['page'], $param['limit'])->select(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list, 'total' => $total]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
|
||||
|
if (empty($param['code'])) { |
||||
|
return $this->toData('1', 'code无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['title'])) { |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['icon'])) { |
||||
|
return $this->toData('1', '图标无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['content'])) { |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
$vote = new VoteModel(); |
||||
|
$vote->code = $param['code']; |
||||
|
$vote->title = $param['title']; |
||||
|
$vote->icon = $param['icon']; |
||||
|
$vote->content = $param['content']; |
||||
|
$vote->score_num = $param['score_num'] ?? 0; |
||||
|
$vote->sort = $param['sort'] ?? 0; |
||||
|
$vote->oneday_times = $param['oneday_times'] ?? 1; |
||||
|
$vote->create_time = date('Y-m-d H:i:s'); |
||||
|
$vote->update_time = date('Y-m-d H:i:s'); |
||||
|
$vote->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} 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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$vote = VoteModel::where('id', $param['id']) |
||||
|
->where('is_delete', VoteModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if (empty($doc)) { |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['code'])) { |
||||
|
return $this->toData('1', 'code无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['title'])) { |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['icon'])) { |
||||
|
return $this->toData('1', '图标无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['content'])) { |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
$isHas = VoteModel::where('is_delete', VoteModel::IS_DELETE_NO) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('title', $param['title'])->find(); |
||||
|
if (!empty($isHas)) { |
||||
|
return $this->toData('1', '标题在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$vote->code = $param['code']; |
||||
|
$vote->title = $param['title']; |
||||
|
$vote->icon = $param['icon']; |
||||
|
$vote->content = $param['content']; |
||||
|
$vote->score_num = $param['score_num'] ?? 0; |
||||
|
$vote->sort = $param['sort'] ?? 0; |
||||
|
$vote->oneday_times = $param['oneday_times'] ?? 1; |
||||
|
$vote->update_time = date('Y-m-d H:i:s'); |
||||
|
$vote->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} 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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$vote = VoteModel::where('id', $param['id']) |
||||
|
->where('is_delete', VoteModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if (empty($vote)) { |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$vote->is_delete = VoteModel::IS_DELETE_YES; |
||||
|
$vote->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,346 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service; |
||||
|
|
||||
|
use app\admin\validate\WithdrawValidate; |
||||
|
use app\home\service\ClickPayService; |
||||
|
use app\home\service\HTPayService; |
||||
|
use app\home\service\IndPayService; |
||||
|
use app\home\service\MoPayService; |
||||
|
use app\home\service\NicePayService; |
||||
|
use app\home\service\PayService; |
||||
|
use app\home\service\QeaePayService; |
||||
|
use app\home\service\TrcPayService; |
||||
|
use app\home\service\XdPayService; |
||||
|
use app\model\AdminModel; |
||||
|
use app\model\PaymentListModel; |
||||
|
use app\model\UserBankModel; |
||||
|
use app\model\UserModel; |
||||
|
use app\model\UserWithdrawalModel; |
||||
|
use function AlibabaCloud\Client\backgroundRed; |
||||
|
|
||||
|
class WithdrawService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(WithdrawValidate::class)->scene('index')->check($param); |
||||
|
$where = []; |
||||
|
$userId = 0; |
||||
|
// 用户号精确搜索 |
||||
|
if (!empty($param['user_no'])) { |
||||
|
$user = UserModel::where('user_no', $param['user_no'])->find(); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extend' => UserWithdrawalModel::$statusList]); |
||||
|
} |
||||
|
$userId = $user['user_id']; |
||||
|
} |
||||
|
// 判断是否是代理 如果是代理 只能看他自己管理的用户 |
||||
|
$whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($whereU)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extend' => UserWithdrawalModel::$statusList]); |
||||
|
} |
||||
|
// 订单号 |
||||
|
if (!empty($param['order_id'])) { |
||||
|
$where['order_no'] = $param['order_id']; |
||||
|
} |
||||
|
if (isset($param['status'])) { |
||||
|
$where['status'] = $param['status']; |
||||
|
} |
||||
|
|
||||
|
if (!empty($param['start_time']) && !empty($param['end_time'])) { |
||||
|
$where['update_time'] = ['between time', [$param['start_time'], $param['end_time']]]; |
||||
|
} |
||||
|
|
||||
|
// 列表 |
||||
|
$list = UserWithdrawalModel::where($where)->where($whereU)->order('id', 'desc')->page($param['page'], $param['limit'])->select(); |
||||
|
// 总数 |
||||
|
$total = UserWithdrawalModel::where($where)->where($whereU)->count(); |
||||
|
// 统计 提现成功 |
||||
|
$sum = UserWithdrawalModel::where($where)->where($whereU)->where('status', 4)->sum('apply_num'); |
||||
|
|
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
// 获取用户号 |
||||
|
$userIdArr = []; |
||||
|
foreach ($list as $idItem) { |
||||
|
$userIdArr[] = $idItem['user_id']; |
||||
|
} |
||||
|
|
||||
|
$userNoArr = UserModel::where('user_id', 'in', $userIdArr)->column('user_no', 'user_id'); |
||||
|
$ifscArr = UserBankModel::where('user_id', 'in', $userIdArr)->column('ifsc', 'user_id'); |
||||
|
|
||||
|
$rows = $list->toArray(); |
||||
|
foreach ($rows as $key => $item) { |
||||
|
$rows[$key]['user_no'] = $userNoArr[$item['user_id']] ?? '-'; // 用户号. |
||||
|
$rows[$key]['ifsc'] = $ifscArr[$item['user_id']] ?? '-'; // ifsc |
||||
|
$rows[$key]['order_id'] = $item['order_no']; |
||||
|
$rows[$key]['status_text'] = UserWithdrawalModel::$statusList[$item['status']]; |
||||
|
//$rows[$key]['pay_info'] = json_decode($item['pay_info'],true); |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $rows, 'sum' => $sum . 'USD', 'extend' => UserWithdrawalModel::$statusList]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function info($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(WithdrawValidate::class)->scene('info')->check($param); |
||||
|
$where = [ |
||||
|
'id' => $param['id'] |
||||
|
]; |
||||
|
|
||||
|
$userId = 0; |
||||
|
$where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($where)) { |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} |
||||
|
|
||||
|
$order_info = []; |
||||
|
$info = UserWithdrawalModel::where($where)->find(); |
||||
|
$ifsc = UserBankModel::where('user_id', $info->user_id)->value('ifsc'); |
||||
|
|
||||
|
if (!$info->isEmpty()) { |
||||
|
$order_info = $info->toArray(); |
||||
|
$order_info['pay_info'] = json_decode($order_info['pay_info'], true); |
||||
|
$channel = PaymentListModel::getPaymentInfo([ |
||||
|
'id' => intval($order_info['channel_id']) |
||||
|
]); |
||||
|
$order_info['channel_name'] = isset($channel['channel']) ? $channel['channel'] : ''; |
||||
|
$order_info['ifsc'] = $ifsc ?? '-'; |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', $order_info); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function change_status($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(WithdrawValidate::class)->scene('status')->check($param); |
||||
|
$isAgent = AdminModel::checkUserIsAgent($adminId); |
||||
|
if ($isAgent) { |
||||
|
return $this->toData('10040', '代理无权限操作'); |
||||
|
} |
||||
|
$where = [ |
||||
|
'id' => $param['id'] |
||||
|
]; |
||||
|
$userId = 0; |
||||
|
$where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($where)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); |
||||
|
} |
||||
|
|
||||
|
$order_info = []; |
||||
|
$info = UserWithdrawalModel::where($where)->find(); |
||||
|
if (empty($info)) { |
||||
|
return $this->toData('1004', '订单不存在'); |
||||
|
} |
||||
|
$order_info = $info->toArray(); |
||||
|
$change_flag = false; |
||||
|
if ($order_info['status'] == 0 && $param['status'] < 3) { |
||||
|
$change_flag = true; |
||||
|
} |
||||
|
if ($order_info['status'] = 1 && ($param['status'] == 3 || $param['status'] == 2)) { |
||||
|
$change_flag = true; |
||||
|
} |
||||
|
if ($order_info['status'] = 3 && $param['status'] == 4) { |
||||
|
$change_flag = true; |
||||
|
} |
||||
|
$pay_flag = false; |
||||
|
$msg = ""; |
||||
|
$content = ""; |
||||
|
if ($change_flag) { |
||||
|
$update_data['status'] = $param['status']; |
||||
|
$update_data['update_time'] = date('Y-m-d H:i:s'); |
||||
|
//拒绝 |
||||
|
if ($param['status'] == 2) { |
||||
|
$updateStatus = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); |
||||
|
} |
||||
|
|
||||
|
//代付 |
||||
|
if ($param['status'] == 3) { |
||||
|
//解冻资金 ,扣除提现 |
||||
|
$updateOne = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 6, $order_info['market_amount'], -$order_info['market_amount'], $order_info['order_no']); |
||||
|
if (!empty($updateOne) && $updateOne['status'] == 200) { |
||||
|
$updateStatus = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 2, -$order_info['market_amount'], 0, $order_info['order_no']); |
||||
|
} else { |
||||
|
//提现事务回滚... |
||||
|
// $updateOne = $this->updateUserAsset($order_info['user_id'], $order_info['account_type'], 5, -$order_info['market_amount'], +$order_info['market_amount'], $order_info['order_no']); |
||||
|
trace("提现失败1 - change_status - order_no=" . $order_info['order_no'] . "---user_id= " . $order_info['user_id'] . "---account_type= " . $order_info['account_type'] . "---market_amount= " . $order_info['market_amount']); |
||||
|
return $this->toData($updateOne['status'] ?? '3251', $updateOne['msg'] ?? $msg, [$content]); |
||||
|
} |
||||
|
|
||||
|
if (!empty($updateStatus) && $updateStatus['status'] == 200) { |
||||
|
$channel = PaymentListModel::getPaymentInfo([ |
||||
|
'id' => $param['channel'] |
||||
|
]); |
||||
|
if ($channel) { |
||||
|
$result = $this->payToUser($order_info, $channel); |
||||
|
if ($result['code'] == 200) { |
||||
|
$update_data['order_idx'] = $result['order_idx']; |
||||
|
$update_data['channel_id'] = $param['channel']; |
||||
|
} else { |
||||
|
$update_data['status'] = 1; //代付失败 |
||||
|
$pay_flag = true; |
||||
|
$content = $result['content']; |
||||
|
$msg = $result['msg']; |
||||
|
} |
||||
|
} |
||||
|
//手动支付完成 |
||||
|
if ($param['channel'] == 0) { |
||||
|
$update_data['status'] = 4; |
||||
|
$update_data['channel_id'] = $param['channel']; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$update_data['beizhu'] = $param['beizhu'] ?? ""; |
||||
|
|
||||
|
if ($param['status'] == 1 || (!empty($updateStatus) && $updateStatus['status'] == 200)) { |
||||
|
UserWithdrawalModel::where($where)->update($update_data); |
||||
|
} else { |
||||
|
trace("提现失败2 - change_status - order_no=" . $order_info['order_no'] . "---user_id= " . $order_info['user_id'] . "---account_type= " . $order_info['account_type'] . "---market_amount= " . $order_info['market_amount']); |
||||
|
return $this->toData($updateStatus['status'] ?? '3251', $updateStatus['msg'] ?? $msg, [$content]); |
||||
|
} |
||||
|
|
||||
|
if ($pay_flag) { |
||||
|
return $this->toData('3250', $msg, [$content]); |
||||
|
} else { |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
return $this->toData('10040', '操作流程不合法'); |
||||
|
} |
||||
|
|
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private function payToUser($order, $channel) |
||||
|
{ |
||||
|
//货币单位换算 |
||||
|
$order['total_amount'] = $order['apply_num'] * $channel['exchange_rate']; |
||||
|
$address_info = json_decode($order['pay_info'], true); |
||||
|
|
||||
|
switch ($channel['type']) { |
||||
|
//印尼支付 |
||||
|
case 2: |
||||
|
return (new IndPayService())->singleIndOrder($order); |
||||
|
break; |
||||
|
//TRC |
||||
|
case 3: |
||||
|
return (new MoPayService())->apply_pay($order['order_no'], $order['total_amount'], $address_info['bank_code'], $address_info['bank_card'], $address_info['true_name'], $address_info['bank_phone'], $address_info['ifsc']); |
||||
|
break; |
||||
|
//合泰 |
||||
|
case 4: |
||||
|
return (new HTPayService())->arPay($order['order_no'], $order['total_amount'], $address_info['bank_code'], $address_info['bank_card'], $address_info['true_name']); |
||||
|
break; |
||||
|
//合泰 |
||||
|
case 5: |
||||
|
return (new XdPayService())->apply_pay($order['order_no'], $order['total_amount'], $address_info['ifsc'], $address_info['bank_card'], $address_info['true_name']); |
||||
|
break; |
||||
|
//QEAE |
||||
|
case 6: |
||||
|
return (new QeaePayService())->apply_pay($order['order_no'], $order['total_amount'], $address_info['bank_card'], $address_info['true_name'], $address_info['ifsc'], $address_info['bank_code']); |
||||
|
break; |
||||
|
//合泰 |
||||
|
case 7: |
||||
|
return (new NicePayService())->apply_pay($order['order_no'], $order['total_amount'], $address_info['bank_card'], $address_info['true_name'], $address_info['ifsc']); |
||||
|
break; |
||||
|
//ClickPay |
||||
|
case 8: |
||||
|
return (new ClickPayService())->apply_pay($order['order_no'], $order['total_amount'], $address_info['bank_card'], $address_info['true_name'], $address_info['ifsc'], $address_info['bank_code']); |
||||
|
break; |
||||
|
default: |
||||
|
|
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function get_balance($param, $adminId) |
||||
|
{ |
||||
|
$channel = PaymentListModel::getPaymentInfo([ |
||||
|
'id' => intval($param['id']) |
||||
|
]); |
||||
|
if ($channel) { |
||||
|
switch ($channel['type']) { |
||||
|
case 1: |
||||
|
//$result=(new IndPayService())->getIndBalance(); |
||||
|
$result = [ |
||||
|
'amount' => 0 |
||||
|
]; |
||||
|
break; |
||||
|
case 2: |
||||
|
$result = (new TrcPayService())->getTrcBalance(); |
||||
|
break; |
||||
|
case 4: |
||||
|
$result = (new HTPayService())->getHtBalance(); |
||||
|
break; |
||||
|
case 5: |
||||
|
$result = (new XdPayService())->getBalance(); |
||||
|
break; |
||||
|
case 6: |
||||
|
$result = (new QeaePayService())->getBalance(); |
||||
|
break; |
||||
|
case 8: |
||||
|
$result = (new ClickPayService())->getBalance(); |
||||
|
break; |
||||
|
default: |
||||
|
$result = [ |
||||
|
'amount' => 0 |
||||
|
]; |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', '请求成功', $result); |
||||
|
|
||||
|
} else { |
||||
|
return $this->toData('1', '参数错误,通道不存在', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function channel_list($param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(WithdrawValidate::class)->scene('info')->check($param); |
||||
|
$where = [ |
||||
|
'id' => $param['id'] |
||||
|
]; |
||||
|
|
||||
|
$userId = 0; |
||||
|
$where = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($where)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => []]); |
||||
|
} |
||||
|
|
||||
|
$order_info = UserWithdrawalModel::getUserDrawalInfo($where); |
||||
|
if ($order_info) { |
||||
|
$channel_list = PaymentListModel::getPaymentList([ |
||||
|
'is_withdrawal' => 1, |
||||
|
'status' => 1, |
||||
|
'channel_type' => $order_info['apply_type'] |
||||
|
]); |
||||
|
} else { |
||||
|
$channel_list = []; |
||||
|
} |
||||
|
return $this->toData('0', '请求成功', $channel_list); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统异常 请稍后重试', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,148 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\service\auth; |
||||
|
|
||||
|
use app\admin\validate\auth\AuthRoleValidate; |
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\AuthRoleModel; |
||||
|
use think\exception\ValidateException; |
||||
|
|
||||
|
class AuthRoleService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function add($param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(AuthRoleValidate::class)->scene('add')->check($param); |
||||
|
// 查找角色是否存在 |
||||
|
$authRole=new AuthRoleModel(); |
||||
|
$rule = $authRole->where('name',$param['name'])->find(); |
||||
|
if(!empty($rule)){ |
||||
|
return $this->toData('200100', '名称已存在', []); |
||||
|
} |
||||
|
$authRole->save($param); |
||||
|
return $this->toData('0', '添加成功.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('100400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('100500', '系统繁忙.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function list($param){ |
||||
|
try { |
||||
|
$authRole=new AuthRoleModel(); |
||||
|
//查询条件 |
||||
|
if(isset($param['name'])&&!empty($param['name'])){ |
||||
|
$authRole=$authRole->where('name',$param['name']); |
||||
|
} |
||||
|
if(isset($param['satus'])&&!empty($param['status'])){ |
||||
|
$authRole=$authRole->where('status',$param['status']); |
||||
|
} |
||||
|
// 总数 |
||||
|
$total = $authRole->count(); |
||||
|
$list=$authRole->order('sort', 'asc')->page($param['page'], $param['limit'])->select(); |
||||
|
for($i=0;$i<count($list);$i++){ |
||||
|
if($list[$i]['rules']){ |
||||
|
$rules=explode(",", $list[$i]['rules']); |
||||
|
//字符串转换为数字类型 |
||||
|
$list[$i]['rules']=array_map(function ($value){ |
||||
|
return (int)$value; |
||||
|
},$rules); |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => $total, 'list' => $list]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function updateStatus($id, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if(empty($id) || $id <= 0){ |
||||
|
return $this->toData('200403', 'id字段丢失', []); |
||||
|
} |
||||
|
// 参数校验 |
||||
|
validate(AuthRoleValidate::class)->scene('updateStatus')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$authRole = AuthRoleModel::find($id); |
||||
|
if(empty($authRole)){ |
||||
|
return $this->toData('200403', '该角色不存在.', []); |
||||
|
} |
||||
|
$authRole->status=$param['status']; |
||||
|
$authRole->save(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
public function allList($param){ |
||||
|
try { |
||||
|
$authRole=new AuthRoleModel(); |
||||
|
//查询条件 |
||||
|
if(isset($param['name'])&&!empty($param['name'])){ |
||||
|
$authRole=$authRole->where('name',$param['name']); |
||||
|
} |
||||
|
if(isset($param['satus'])&&!empty($param['status'])){ |
||||
|
$authRole=$authRole->where('status',$param['status']); |
||||
|
} |
||||
|
$list=$authRole->order('sort', 'asc')->column('name,id'); |
||||
|
return $this->toData('0', 'SUCCESS', $list); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function edit($id, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if(empty($id) || $id <= 0){ |
||||
|
return $this->toData('200403', 'id字段丢失', []); |
||||
|
} |
||||
|
// 参数校验 |
||||
|
validate(AuthRoleValidate::class)->scene('edit')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$authRole = AuthRoleModel::find($id); |
||||
|
if(empty($authRole)){ |
||||
|
return $this->toData('200403', '该规则不存在.', []); |
||||
|
} |
||||
|
$authRole->withoutField('id')->save($param); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function del($id): array |
||||
|
{ |
||||
|
try { |
||||
|
$authRole = AuthRoleModel::find($id); |
||||
|
$authRole->delete(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,216 @@ |
|||||
|
<?php |
||||
|
namespace app\admin\service\auth; |
||||
|
|
||||
|
use app\admin\validate\auth\AuthRuleValidate; |
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\AuthRuleModel; |
||||
|
use app\model\AdminModel; |
||||
|
use app\model\AuthRoleModel; |
||||
|
use think\exception\ValidateException; |
||||
|
|
||||
|
class AuthRuleService extends AdminBaseService |
||||
|
{ |
||||
|
public function add($param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(AuthRuleValidate::class)->scene('add')->check($param); |
||||
|
$this->verifyRepeat($param); |
||||
|
$authRule=new AuthRuleModel(); |
||||
|
$authRule->create($param); |
||||
|
return $this->toData('0', '添加成功.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('100400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('100500', '系统繁忙.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查重验证 |
||||
|
* @param $param |
||||
|
* @return void |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\DbException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
*/ |
||||
|
public function verifyRepeat($param){ |
||||
|
$authRule=new AuthRuleModel(); |
||||
|
if(isset($param['id'])){ //编辑 |
||||
|
$authRule=$authRule->whereNotIn('id',[$param['id']]); |
||||
|
} |
||||
|
$rule = (clone $authRule)->where('name',$param['name'])->find(); |
||||
|
if(!empty($rule)){ |
||||
|
throw new ValidateException('权限标识已存在'); |
||||
|
} |
||||
|
|
||||
|
if($param['type']=='menu'){ |
||||
|
$rule = (clone $authRule)->where('path', $param['path'])->find(); |
||||
|
if(!empty($rule)){ |
||||
|
throw new ValidateException('路由地址已存在'); |
||||
|
} |
||||
|
$rule = (clone $authRule)->where('component',$param['component'])->find(); |
||||
|
if(!empty($rule)){ |
||||
|
throw new ValidateException('组件已存在'); |
||||
|
} |
||||
|
} |
||||
|
if($param['type']=='catelog'){ |
||||
|
$rule = (clone $authRule)->where('path',$param['path'])->find(); |
||||
|
if(!empty($rule)){ |
||||
|
throw new ValidateException('路由地址已存在'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function list($user_id,$param){ |
||||
|
try { |
||||
|
$authRule=new AuthRuleModel(); |
||||
|
//查询条件 |
||||
|
if(isset($param['name'])&&!empty($param['name'])){ |
||||
|
$authRule=$authRule->where('name',$param['name']); |
||||
|
} |
||||
|
if(isset($param['satus'])&&!empty($param['status'])){ |
||||
|
$authRule=$authRule->where('status',$param['status']); |
||||
|
} |
||||
|
|
||||
|
//获取用户权限id |
||||
|
$user=AdminModel::find($user_id); |
||||
|
//查询拥有权限 |
||||
|
if($user->role_id=='7'){ |
||||
|
//超级管理员拥有全部权限 |
||||
|
$list=$authRule::order('sort', 'asc')->select()->toArray(); |
||||
|
}else{ |
||||
|
$role=AuthRoleModel::find($user->role_id); |
||||
|
$list=$authRule::whereIn('id',$role->rules)->order('sort', 'asc')->select()->toArray(); |
||||
|
} |
||||
|
|
||||
|
// 总数 |
||||
|
// $total = $authRule->count(); |
||||
|
// $list=$authRule->order('sort', 'asc')->select()->toArray(); |
||||
|
$list=$this->getTreeMenu($list,0,true); |
||||
|
|
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', $list); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
public function allList($user_id){ |
||||
|
try { |
||||
|
//获取用户权限id |
||||
|
$user=AdminModel::find($user_id); |
||||
|
|
||||
|
//查询拥有权限 |
||||
|
if($user->role_id=='7'){ |
||||
|
//超级管理员拥有全部权限 |
||||
|
$list=AuthRuleModel::order('sort', 'asc')->select()->toArray(); |
||||
|
}else{ |
||||
|
$role=AuthRoleModel::find($user->role_id); |
||||
|
$list=AuthRuleModel::whereIn('id',$role->rules)->order('sort', 'asc')->select()->toArray(); |
||||
|
} |
||||
|
// $list=$authRule->order('sort', 'asc')->select()->toArray(); |
||||
|
$list=$this->getTreeMenu($list,0,true); |
||||
|
return $this->toData('0', 'SUCCESS',$list); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
public function edit($id, $param): array |
||||
|
{ |
||||
|
try { |
||||
|
// 主键 |
||||
|
if(empty($id) || $id <= 0){ |
||||
|
return $this->toData('200403', 'id字段丢失', []); |
||||
|
} |
||||
|
// 参数校验 |
||||
|
validate(AuthRuleValidate::class)->scene('edit')->check($param); |
||||
|
// 查找用户信息 |
||||
|
$authRule = AuthRuleModel::find($id); |
||||
|
if(empty($authRule)){ |
||||
|
return $this->toData('200403', 'Please log in first.', []); |
||||
|
} |
||||
|
$this->verifyRepeat($param); |
||||
|
$authRule->save($param); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function getSideMenu($user_id){ |
||||
|
try { |
||||
|
//获取用户权限id |
||||
|
$user=AdminModel::find($user_id); |
||||
|
$role=AuthRoleModel::find($user->role_id); |
||||
|
//查询拥有权限 |
||||
|
if($user->role_id=='7'){ |
||||
|
//超级管理员拥有全部权限 |
||||
|
$authRule=AuthRuleModel::order('sort', 'asc')->select()->toArray(); |
||||
|
}else{ |
||||
|
$role=AuthRoleModel::find($user->role_id); |
||||
|
$authRule=AuthRuleModel::whereIn('id',$role->rules)->order('sort', 'asc')->select()->toArray(); |
||||
|
} |
||||
|
// $authRule=AuthRuleModel::whereIn('id',$role->rules)->order('sort', 'asc')->select()->toArray(); |
||||
|
// $authRule=AuthRuleModel::order('sort', 'asc')->select()->toArray();//显示全部 |
||||
|
$menus=[]; |
||||
|
for($i=0;$i<count($authRule);$i++){ |
||||
|
$menuItem=[ |
||||
|
'id'=>$authRule[$i]['id'], |
||||
|
'pid'=>$authRule[$i]['pid'], |
||||
|
'path'=>$authRule[$i]['path'], |
||||
|
'name'=>$authRule[$i]['name'], |
||||
|
'component'=>$authRule[$i]['component'], |
||||
|
'redirect'=>$authRule[$i]['redirect'], |
||||
|
'meta'=>[ |
||||
|
'title'=>$authRule[$i]['title'], |
||||
|
'hideMenu'=>$authRule[$i]['show']===1?false:true, |
||||
|
'icon'=>$authRule[$i]['icon'], |
||||
|
'ignoreKeepAlive'=>true, |
||||
|
'isLink'=>false, |
||||
|
// 'currentActiveMenu'=>"", |
||||
|
] |
||||
|
]; |
||||
|
array_push($menus,$menuItem); |
||||
|
} |
||||
|
|
||||
|
$list=$this->getTreeMenu($menus,0,true); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS',$list); |
||||
|
|
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @param $id |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function del($id): array |
||||
|
{ |
||||
|
try { |
||||
|
$authRule = AuthRuleModel::find($id); |
||||
|
$authRule->delete(); |
||||
|
// 返回 |
||||
|
return $this->toData('0', 'Modification successful.', []); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('200400', $message); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('200500', 'The system is busy.', [$exception->getMessage()]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,200 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\document; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\AnnouncementModel; |
||||
|
use app\model\LanguageSettingModel; |
||||
|
|
||||
|
class AnnouncementService extends AdminBaseService |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$rows = []; |
||||
|
$list = AnnouncementModel::where('is_delete', AnnouncementModel::IS_DELETE_NO) |
||||
|
->field('id,lang,name,title,status,weight') |
||||
|
->order('name', 'asc') |
||||
|
->order('weight', 'desc')->select(); |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
$lang = LanguageSettingModel::where('id', '>', 0)->column('china_name', 'id'); |
||||
|
foreach ($rows as $key=>$item){ |
||||
|
$rows[$key]['lang'] = $lang[$item['lang']] ?? '-'; |
||||
|
$rows[$key]['status'] = AnnouncementModel::STATUS_MAP[$item['status']] ?? '-'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['weight']) || !is_numeric($param['weight']) || ceil($param['weight']) != $param['weight'] || $param['weight'] < 0){ |
||||
|
return $this->toData('1', '权重无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
// |
||||
|
// if(!isset($param['is_pop_ups']) || !in_array($param['is_pop_ups'], [1,2])){ |
||||
|
// return $this->toData('1', 'h5弹窗状态无效'); |
||||
|
// } |
||||
|
|
||||
|
$docExists = AnnouncementModel::where('is_delete', AnnouncementModel::IS_DELETE_NO) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc = new AnnouncementModel; |
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->weight = $param['weight']; |
||||
|
if (!empty($param['is_pop_ups'])) $doc->is_pop_ups = $param['is_pop_ups']; |
||||
|
$doc->create_time = date('Y-m-d H:i:s'); |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function detail($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = AnnouncementModel::where('id', $param['id']) |
||||
|
->where('is_delete', AnnouncementModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$docArr = $doc->toArray(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['row' => $docArr,]); |
||||
|
|
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = AnnouncementModel::where('id', $param['id']) |
||||
|
->where('is_delete', AnnouncementModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['weight']) || !is_numeric($param['weight']) || ceil($param['weight']) != $param['weight'] || $param['weight'] < 0){ |
||||
|
return $this->toData('1', '权重无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
// $docExists = AnnouncementModel::where('is_delete', AnnouncementModel::IS_DELETE_NO) |
||||
|
// ->where('id', '<>', $param['id']) |
||||
|
// ->where('name', $param['name']) |
||||
|
// ->where('lang', $param['lang'])->find(); |
||||
|
// if(!empty($docExists)){ |
||||
|
// return $this->toData('1', '已存在相同内容'); |
||||
|
// } |
||||
|
|
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->weight = $param['weight']; |
||||
|
if (!empty($param['is_pop_ups'])) $doc->is_pop_ups = $param['is_pop_ups']; |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = AnnouncementModel::where('id', $param['id']) |
||||
|
->where('is_delete', AnnouncementModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc->is_delete = AnnouncementModel::IS_DELETE_YES; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,196 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\document; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\BannerModel; |
||||
|
use app\model\LanguageSettingModel; |
||||
|
|
||||
|
class BannerService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$rows = []; |
||||
|
$list = BannerModel::where('is_delete', BannerModel::IS_DELETE_NO) |
||||
|
->field('id,lang,path,name,title,status') |
||||
|
->order('name', 'asc') |
||||
|
->select(); |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
$lang = LanguageSettingModel::where('id', '>', 0)->column('china_name', 'id'); |
||||
|
foreach ($rows as $key=>$item){ |
||||
|
$rows[$key]['lang'] = $lang[$item['lang']] ?? '-'; |
||||
|
$rows[$key]['status'] = BannerModel::STATUS_MAP[$item['status']] ?? '-'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
|
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['path']) || !is_string($param['path'])){ |
||||
|
return $this->toData('1', '图片路径无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = BannerModel::where('is_delete', BannerModel::IS_DELETE_NO) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc = new BannerModel(); |
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->path = $param['path']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->create_time = date('Y-m-d H:i:s'); |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function detail($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = BannerModel::where('id', $param['id']) |
||||
|
->where('is_delete', BannerModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$docArr = $doc->toArray(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['row' => $docArr]); |
||||
|
|
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = BannerModel::where('id', $param['id']) |
||||
|
->where('is_delete', BannerModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['path']) || !is_string($param['path'])){ |
||||
|
return $this->toData('1', '图片路径无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = BannerModel::where('is_delete', BannerModel::IS_DELETE_NO) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->path = $param['path']; |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = BannerModel::where('id', $param['id']) |
||||
|
->where('is_delete', BannerModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc->is_delete = BannerModel::IS_DELETE_YES; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,195 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\document; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\FaqModel; |
||||
|
use app\model\LanguageSettingModel; |
||||
|
|
||||
|
class FaqService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$rows = []; |
||||
|
$list = FaqModel::where('is_delete', FaqModel::IS_DELETE_NO) |
||||
|
->field('id,lang,name,title,status,weight') |
||||
|
->order('name', 'asc') |
||||
|
->order('weight', 'desc')->select(); |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
$lang = LanguageSettingModel::where('id', '>', 0)->column('china_name', 'id'); |
||||
|
foreach ($rows as $key=>$item){ |
||||
|
$rows[$key]['lang'] = $lang[$item['lang']] ?? '-'; |
||||
|
$rows[$key]['status'] = FaqModel::STATUS_MAP[$item['status']] ?? '-'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['weight']) || !is_numeric($param['weight']) || ceil($param['weight']) != $param['weight'] || $param['weight'] < 0){ |
||||
|
return $this->toData('1', '权重无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = FaqModel::where('is_delete', FaqModel::IS_DELETE_NO) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc = new FaqModel; |
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->weight = $param['weight']; |
||||
|
$doc->create_time = date('Y-m-d H:i:s'); |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function detail($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = FaqModel::where('id', $param['id']) |
||||
|
->where('is_delete', FaqModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$docArr = $doc->toArray(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['row' => $docArr,]); |
||||
|
|
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = FaqModel::where('id', $param['id']) |
||||
|
->where('is_delete', FaqModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['weight']) || !is_numeric($param['weight']) || ceil($param['weight']) != $param['weight'] || $param['weight'] < 0){ |
||||
|
return $this->toData('1', '权重无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = FaqModel::where('is_delete', FaqModel::IS_DELETE_NO) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->weight = $param['weight']; |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = FaqModel::where('id', $param['id']) |
||||
|
->where('is_delete', FaqModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc->is_delete = FaqModel::IS_DELETE_YES; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,211 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\document; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\DocumentModel; |
||||
|
use app\model\LanguageSettingModel; |
||||
|
|
||||
|
class IndexService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$rows = []; |
||||
|
$list = DocumentModel::where('is_delete', DocumentModel::IS_DELETE_NO) |
||||
|
->field('id,lang,type,name,title,status,weight') |
||||
|
->order('type', 'asc') |
||||
|
->order('name', 'asc') |
||||
|
->order('weight', 'desc')->select(); |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
$lang = LanguageSettingModel::where('id', '>', 0)->column('china_name', 'id'); |
||||
|
foreach ($rows as $key=>$item){ |
||||
|
$rows[$key]['type'] = DocumentModel::TYPE_MAP[$item['type']] ?? '-'; |
||||
|
$rows[$key]['lang'] = $lang[$item['lang']] ?? '-'; |
||||
|
$rows[$key]['status'] = DocumentModel::STATUS_MAP[$item['status']] ?? '-'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows),'extend' => ['typeMap' => DocumentModel::TYPE_MAP]]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
$typeMapKeys = array_keys(DocumentModel::TYPE_MAP); |
||||
|
if(empty($param['type']) || !in_array($param['type'],$typeMapKeys)){ |
||||
|
return $this->toData('1', '文章类型无效'); |
||||
|
} |
||||
|
|
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['weight']) || !is_numeric($param['weight']) || ceil($param['weight']) != $param['weight'] || $param['weight'] < 0){ |
||||
|
return $this->toData('1', '权重无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = DocumentModel::where('type', $param['type']) |
||||
|
->where('is_delete', DocumentModel::IS_DELETE_NO) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc = new DocumentModel; |
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->type = $param['type']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->weight = $param['weight']; |
||||
|
$doc->create_time = date('Y-m-d H:i:s'); |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function detail($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = DocumentModel::where('id', $param['id']) |
||||
|
->where('is_delete', DocumentModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$docArr = $doc->toArray(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['row' => $docArr, |
||||
|
'extend' => ['typeMap' => DocumentModel::TYPE_MAP]]); |
||||
|
|
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = DocumentModel::where('id', $param['id']) |
||||
|
->where('is_delete', DocumentModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$typeMapKeys = array_keys(DocumentModel::TYPE_MAP); |
||||
|
if(empty($param['type']) || !in_array($param['type'],$typeMapKeys)){ |
||||
|
return $this->toData('1', '文章类型无效'); |
||||
|
} |
||||
|
|
||||
|
$langIds = LanguageSettingModel::column('id'); |
||||
|
if(empty($param['lang']) || !in_array($param['lang'], $langIds)){ |
||||
|
return $this->toData('1', '语言类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['title']) || !is_string($param['title'])){ |
||||
|
return $this->toData('1', '标题无效'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['weight']) || !is_numeric($param['weight']) || ceil($param['weight']) != $param['weight'] || $param['weight'] < 0){ |
||||
|
return $this->toData('1', '权重无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = DocumentModel::where('type', $param['type']) |
||||
|
->where('is_delete', DocumentModel::IS_DELETE_NO) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('name', $param['name']) |
||||
|
->where('lang', $param['lang'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc->lang = $param['lang']; |
||||
|
$doc->type = $param['type']; |
||||
|
$doc->title = $param['title']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->weight = $param['weight']; |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}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', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = DocumentModel::where('id', $param['id']) |
||||
|
->where('is_delete', DocumentModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc->is_delete = DocumentModel::IS_DELETE_YES; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,148 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\document; |
||||
|
|
||||
|
use app\home\service\BaseHomeService; |
||||
|
use app\model\LandingPageModel; |
||||
|
|
||||
|
class LandingPageService extends BaseHomeService |
||||
|
{ |
||||
|
public function index(): array |
||||
|
{ |
||||
|
try { |
||||
|
$rows = []; |
||||
|
$list = LandingPageModel::where('is_delete', LandingPageModel::IS_DELETE_NO) |
||||
|
->order('id', 'desc')->select(); |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param): array |
||||
|
{ |
||||
|
try { |
||||
|
|
||||
|
// 名称 |
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
// 内容 |
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
// 跳转地址 |
||||
|
if(empty($param['link_url']) || !is_string($param['link_url'])){ |
||||
|
$param['link_url'] = ''; |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [LandingPageModel::STATUS_ON, LandingPageModel::STATUS_OFF])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = LandingPageModel::where('is_delete', LandingPageModel::IS_DELETE_NO) |
||||
|
->where('name', $param['name']) |
||||
|
->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc = new LandingPageModel; |
||||
|
$doc->name = $param['name']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->click_num = 0; |
||||
|
$doc->link_url = 0; |
||||
|
$doc->is_delete = 0; |
||||
|
$doc->status = 0; |
||||
|
$doc->create_time = date('Y-m-d H:i:s'); |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function edit($param): array |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = LandingPageModel::where('id', $param['id']) |
||||
|
->where('is_delete', LandingPageModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
// 名称 |
||||
|
if(empty($param['name']) || !is_string($param['name'])){ |
||||
|
return $this->toData('1', '名称无效'); |
||||
|
} |
||||
|
|
||||
|
// 内容 |
||||
|
if(empty($param['content']) || !is_string($param['content'])){ |
||||
|
return $this->toData('1', '内容无效'); |
||||
|
} |
||||
|
|
||||
|
// 跳转地址 |
||||
|
if(empty($param['link_url']) || !is_string($param['link_url'])){ |
||||
|
$param['link_url'] = ''; |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['status']) || !in_array($param['status'], [LandingPageModel::STATUS_ON, LandingPageModel::STATUS_OFF])){ |
||||
|
return $this->toData('1', '状态无效'); |
||||
|
} |
||||
|
|
||||
|
$docExists = LandingPageModel::where('is_delete', LandingPageModel::IS_DELETE_NO) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('name', $param['name'])->find(); |
||||
|
if(!empty($docExists)){ |
||||
|
return $this->toData('1', '已存在相同内容'); |
||||
|
} |
||||
|
|
||||
|
$doc->name = $param['name']; |
||||
|
$doc->content = $param['content']; |
||||
|
$doc->status = $param['status']; |
||||
|
$doc->link_url = $param['link_url']; |
||||
|
$doc->update_time = date('Y-m-d H:i:s'); |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function del($param): array |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc = LandingPageModel::where('id', $param['id']) |
||||
|
->where('is_delete', LandingPageModel::IS_DELETE_NO) |
||||
|
->find(); |
||||
|
if(empty($doc)){ |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$doc->is_delete = LandingPageModel::IS_DELETE_YES; |
||||
|
$doc->save(); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,372 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\StockBlockListModel; |
||||
|
use app\model\StockHkdListModel; |
||||
|
use app\model\StockIdnListModel; |
||||
|
use app\model\StockInListModel; |
||||
|
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; |
||||
|
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->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 |
||||
|
]); |
||||
|
|
||||
|
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; |
||||
|
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->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 |
||||
|
]); |
||||
|
|
||||
|
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()]); |
||||
|
// } |
||||
|
// } |
||||
|
} |
@ -0,0 +1,138 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\BrokerageSettingModel; |
||||
|
|
||||
|
// 配置 返佣配置 |
||||
|
class BrokerageService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = BrokerageSettingModel::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(!isset($param['brok_type']) || !in_array($param['brok_type'], [0,1,2])){ |
||||
|
return $this->toData('1', '返佣类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['pay_type']) || !in_array($param['pay_type'], [0,1])){ |
||||
|
return $this->toData('1', '结算方式无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(!isset($param['parent_fee']) || !is_numeric($param['parent_fee']) || $param['parent_fee'] < 0){ |
||||
|
return $this->toData('1', '返佣比例无效1'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['grandpa_fee']) || !is_numeric($param['grandpa_fee']) || $param['grandpa_fee'] < 0){ |
||||
|
return $this->toData('1', '返佣比例无效2'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['top_fee']) || !is_numeric($param['top_fee']) || $param['top_fee'] < 0){ |
||||
|
return $this->toData('1', '返佣比例无效3'); |
||||
|
} |
||||
|
|
||||
|
if(isset($param['remark']) && (!is_string($param['remark']) || strlen($param['remark']) >= 15) ){ |
||||
|
return $this->toData('1', '备注无效'); |
||||
|
} |
||||
|
|
||||
|
$remark = $param['remark']?? ''; |
||||
|
|
||||
|
$brok = new BrokerageSettingModel; |
||||
|
$brok->brok_type = $param['brok_type']; |
||||
|
$brok->pay_type = $param['pay_type']; |
||||
|
$brok->parent_fee = $param['parent_fee']; |
||||
|
$brok->grandpa_fee = $param['grandpa_fee']; |
||||
|
$brok->top_fee = $param['top_fee']; |
||||
|
$brok->remark = $remark; |
||||
|
$brok->save(); |
||||
|
|
||||
|
$fee_key=$this->getBrokerageKey($param['brok_type']); |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key, $param); |
||||
|
|
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '主键无效'); |
||||
|
} |
||||
|
|
||||
|
$brok = BrokerageSettingModel::where('id', $param['id'])->find(); |
||||
|
if(empty($brok)){ |
||||
|
return $this->toData('1', '主键无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(!isset($param['brok_type']) || !in_array($param['brok_type'], [0,1,2])){ |
||||
|
return $this->toData('1', '返佣类型无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['pay_type']) || !in_array($param['pay_type'], [0,1])){ |
||||
|
return $this->toData('1', '结算方式无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['parent_fee']) || !is_numeric($param['parent_fee']) || $param['parent_fee'] < 0){ |
||||
|
return $this->toData('1', '返佣比例无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['grandpa_fee']) || !is_numeric($param['grandpa_fee']) || $param['grandpa_fee'] < 0){ |
||||
|
return $this->toData('1', '返佣比例无效'); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['top_fee']) || !is_numeric($param['top_fee']) || $param['top_fee'] < 0){ |
||||
|
return $this->toData('1', '返佣比例无效'); |
||||
|
} |
||||
|
|
||||
|
if(isset($param['remark']) && (!is_string($param['remark']) || strlen($param['remark']) >= 15) ){ |
||||
|
return $this->toData('1', '备注无效'); |
||||
|
} |
||||
|
|
||||
|
$remark = $param['remark']?? ''; |
||||
|
|
||||
|
|
||||
|
$brok->brok_type = $param['brok_type']; |
||||
|
$brok->pay_type = $param['pay_type']; |
||||
|
$brok->parent_fee = $param['parent_fee']; |
||||
|
$brok->grandpa_fee = $param['grandpa_fee']; |
||||
|
$brok->top_fee = $param['top_fee']; |
||||
|
$brok->remark = $remark; |
||||
|
$brok->save(); |
||||
|
|
||||
|
$fee_key=$this->getBrokerageKey($param['brok_type']); |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key, $param); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,348 @@ |
|||||
|
<?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', []); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,161 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\admin\validate\setting\MarketValidate; |
||||
|
use app\model\ContractMarketModel; |
||||
|
use think\exception\ValidateException; |
||||
|
|
||||
|
class DMarketService extends AdminBaseService |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = ContractMarketModel::where('type', ContractMarketModel::TYPE_DIGITAL_SELF) |
||||
|
->order('id', 'desc') |
||||
|
->select(); |
||||
|
$rows = []; |
||||
|
if(!$list->isEmpty()){ |
||||
|
foreach ($list as $item){ |
||||
|
if(empty($rows[$item['trade_name']])){ |
||||
|
$rows[$item['trade_name']] = [ |
||||
|
'trade_name' => $item['trade_name'], |
||||
|
'begin_time' => $item['begin_time'], |
||||
|
'end_time' => $item['end_time'], |
||||
|
'max_price' => $item['max_price'], |
||||
|
'step' => $item['step'], |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$rows = array_values($rows); |
||||
|
return $this->toData('0','SUCCSS',['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 详情 |
||||
|
public function detail($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['trade_name']) || !is_string($param['trade_name'])){ |
||||
|
return $this->toData('1', '参数错误'); |
||||
|
} |
||||
|
$list = ContractMarketModel::where('type', ContractMarketModel::TYPE_DIGITAL_SELF) |
||||
|
->where('trade_name', $param['trade_name']) |
||||
|
->order('id', 'desc')->select(); |
||||
|
$rows = []; |
||||
|
if(!$list->isEmpty()){ |
||||
|
foreach ($list as $item){ |
||||
|
$rows[] = [ |
||||
|
'id' => $item['id'], |
||||
|
'trade_name' => $item['trade_name'], |
||||
|
'begin_time' => $item['begin_time'], |
||||
|
'end_time' => $item['end_time'], |
||||
|
'max_price' => $item['max_price'], |
||||
|
'step' => $item['step'], |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0','SUCCESS',['list' => $rows]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 新增 |
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(MarketValidate::class)->scene('add')->check($param); |
||||
|
|
||||
|
// 必须大于当前时间 |
||||
|
if(strtotime($param['end_time']) - time() <= 0){ |
||||
|
return $this->toData('1','结束时间无效1'); |
||||
|
} |
||||
|
|
||||
|
if((strtotime($param['begin_time']) - time()) <= 0 || (strtotime($param['end_time']) - strtotime($param['begin_time'])) <= 0){ |
||||
|
return $this->toData('1','开始时间无效2'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
$market = new ContractMarketModel; |
||||
|
$market->trade_name = $param['trade_name']; |
||||
|
$market->begin_time = $param['begin_time']; |
||||
|
$market->end_time = $param['end_time']; |
||||
|
$market->max_price = $param['max_price']; |
||||
|
$market->type = ContractMarketModel::TYPE_DIGITAL_SELF; |
||||
|
$market->save(); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(MarketValidate::class)->scene('edit')->check($param); |
||||
|
|
||||
|
// 目标 |
||||
|
$market = ContractMarketModel::where('id', $param['id'])->where('type', ContractMarketModel::TYPE_DIGITAL_SELF)->find(); |
||||
|
if(empty($market)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 必须大于当前时间 |
||||
|
if(strtotime($param['end_time']) - time() <= 0){ |
||||
|
return $this->toData('1','时间无效'); |
||||
|
} |
||||
|
|
||||
|
if((strtotime($param['begin_time']) - time()) <= 0 || (strtotime($param['end_time']) - strtotime($param['begin_time'])) <= 0){ |
||||
|
return $this->toData('1','开始时间无效'); |
||||
|
} |
||||
|
|
||||
|
$market->trade_name = $param['trade_name']; |
||||
|
$market->begin_time = $param['begin_time']; |
||||
|
$market->end_time = $param['end_time']; |
||||
|
$market->max_price = $param['max_price']; |
||||
|
$market->save(); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 删除 |
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(MarketValidate::class)->scene('del')->check($param); |
||||
|
|
||||
|
// 目标 |
||||
|
$market = ContractMarketModel::where('id', $param['id'])->where('type',ContractMarketModel::TYPE_DIGITAL_SELF)->find(); |
||||
|
if(empty($market)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$market->delete(); |
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,203 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\DigitalListModel; |
||||
|
|
||||
|
// 现货交易对 |
||||
|
class DigitalService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = DigitalListModel::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'])){ |
||||
|
return $this->toData('1', '数字货币名称无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(empty($param['exchange_name']) || !is_string($param['exchange_name'])){ |
||||
|
return $this->toData('1', '数字币兑换对名称无效'); |
||||
|
} |
||||
|
|
||||
|
// 简介 |
||||
|
if(!empty($param['info']) && !is_string($param['info'])){ |
||||
|
return $this->toData('1', '简介无效'); |
||||
|
} |
||||
|
$info = $param['info']?? ''; |
||||
|
|
||||
|
// 状态 |
||||
|
if(!isset($param['status']) || !in_array($param['status'], [0,1])){ |
||||
|
return $this->toData('1', '启用状态无效'); |
||||
|
} |
||||
|
|
||||
|
// 排序 |
||||
|
if(!isset($param['sort']) || !is_numeric($param['sort']) || ceil($param['sort']) != $param['sort']){ |
||||
|
return $this->toData('1', '排序无效'); |
||||
|
} |
||||
|
|
||||
|
// 图片链接 |
||||
|
if(empty($param['logo_link']) || !is_string($param['logo_link'])){ |
||||
|
return $this->toData('1', 'logo链接无效'); |
||||
|
} |
||||
|
|
||||
|
// 小数位数 |
||||
|
if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] < 0 || ceil($param['keep_decimal']) != $param['keep_decimal']){ |
||||
|
return $this->toData('1', '保留小数位无效'); |
||||
|
} |
||||
|
|
||||
|
// 判断股票代码是否已经存在 |
||||
|
$count = DigitalListModel::where('trade_name', $param['trade_name'])->where('exchange_name', $param['exchange_name'])->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1', '现货数字币交易对已经存在'); |
||||
|
} |
||||
|
|
||||
|
$digitalList = new DigitalListModel; |
||||
|
$digitalList->trade_name = $param['trade_name']; |
||||
|
$digitalList->exchange_name = $param['exchange_name']; |
||||
|
$digitalList->status = $param['status']; |
||||
|
$digitalList->logo_link = $param['logo_link']; |
||||
|
$digitalList->sort = $param['sort']; |
||||
|
$digitalList->keep_decimal = $param['keep_decimal']; |
||||
|
|
||||
|
$digitalList->info = $info; |
||||
|
$digitalList->create_time = date('Y-m-d H:i:s'); |
||||
|
$digitalList->update_time = date('Y-m-d H:i:s'); |
||||
|
$digitalList->save(); |
||||
|
|
||||
|
// 设置缓存 |
||||
|
$fee_key="DIGITAL:LIST:".strtoupper($param['trade_name']); |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key,[ |
||||
|
'name'=>strtoupper($param['trade_name']), |
||||
|
'sort'=>$param['sort'], |
||||
|
'exchange_name'=>$param['exchange_name'], |
||||
|
'logo_link'=>$param['logo_link'], |
||||
|
'keep_decimal'=>$param['keep_decimal'], |
||||
|
'status'=>$param['status'], |
||||
|
]); |
||||
|
|
||||
|
return $this->toData('0', '操作成功', []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
|
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
$digitalList = DigitalListModel::where('id', $param['id'])->find(); |
||||
|
if(empty($digitalList)){ |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['trade_name']) || !is_string($param['trade_name'])){ |
||||
|
return $this->toData('1', '数字货币名称无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(empty($param['exchange_name']) || !is_string($param['exchange_name'])){ |
||||
|
return $this->toData('1', '数字币兑换对名称无效'); |
||||
|
} |
||||
|
|
||||
|
// 简介 |
||||
|
if(!empty($param['info']) && !is_string($param['info'])){ |
||||
|
return $this->toData('1', '简介无效'); |
||||
|
} |
||||
|
$info = $param['info']?? ''; |
||||
|
|
||||
|
// 状态 |
||||
|
if(!isset($param['status']) || !in_array($param['status'], [0,1])){ |
||||
|
return $this->toData('1', '启用状态无效'); |
||||
|
} |
||||
|
|
||||
|
// 排序 |
||||
|
if(!isset($param['sort']) || !is_numeric($param['sort']) || ceil($param['sort']) != $param['sort']){ |
||||
|
return $this->toData('1', '排序无效'); |
||||
|
} |
||||
|
|
||||
|
// 图片链接 |
||||
|
if(empty($param['logo_link']) || !is_string($param['logo_link'])){ |
||||
|
return $this->toData('1', 'logo链接无效'); |
||||
|
} |
||||
|
|
||||
|
// 小数位数 |
||||
|
if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] < 0 || ceil($param['keep_decimal']) != $param['keep_decimal']){ |
||||
|
return $this->toData('1', '保留小数位无效'); |
||||
|
} |
||||
|
|
||||
|
// 判断股票代码是否已经存在 |
||||
|
$count = DigitalListModel::where('trade_name', $param['trade_name'])->where('exchange_name', $param['exchange_name']) |
||||
|
->where('id','<>', $param['id']) |
||||
|
->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1', '现货数字币交易对已经存在'); |
||||
|
} |
||||
|
|
||||
|
$digitalList->trade_name = $param['trade_name']; |
||||
|
$digitalList->exchange_name = $param['exchange_name']; |
||||
|
$digitalList->status = $param['status']; |
||||
|
$digitalList->logo_link = $param['logo_link']; |
||||
|
$digitalList->sort = $param['sort']; |
||||
|
$digitalList->keep_decimal = $param['keep_decimal']; |
||||
|
|
||||
|
$digitalList->info = $info; |
||||
|
$digitalList->update_time = date('Y-m-d H:i:s'); |
||||
|
$digitalList->save(); |
||||
|
|
||||
|
// 设置缓存 |
||||
|
$fee_key="DIGITAL:LIST:".strtoupper($param['trade_name']); |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key,[ |
||||
|
'name'=>strtoupper($param['trade_name']), |
||||
|
'sort'=>$param['sort'], |
||||
|
'logo_link'=>$param['logo_link'], |
||||
|
'keep_decimal'=>$param['keep_decimal'], |
||||
|
'status'=>$param['status'], |
||||
|
]); |
||||
|
|
||||
|
return $this->toData('0', '操作成功', []); |
||||
|
}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 = DigitalListModel::where('status', 1)->order('id', 'desc') |
||||
|
->where('is_owner', $param['is_owner']) |
||||
|
->column('trade_name', 'id'); |
||||
|
} else { |
||||
|
$list = DigitalListModel::where('status', 1)->order('id', 'desc')->column('trade_name', 'id'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,68 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\DrawalSettingModel; |
||||
|
|
||||
|
class DrawalService extends AdminBaseService |
||||
|
{ |
||||
|
// 提现手续费 |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
|
||||
|
try { |
||||
|
$list = DrawalSettingModel::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 edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['bank_drawal_fee']) || !is_numeric($param['bank_drawal_fee']) || $param['bank_drawal_fee'] < 0){ |
||||
|
return $this->toData('1', '银行提现手续费无效', []); |
||||
|
} |
||||
|
if(empty($param['digital_drawal_fee']) || !is_numeric($param['digital_drawal_fee']) || $param['digital_drawal_fee'] < 0){ |
||||
|
return $this->toData('1', '数字币提现手续费无效', []); |
||||
|
} |
||||
|
if(empty($param['min_recharge']) || !is_numeric($param['min_recharge']) || $param['min_recharge'] < 0){ |
||||
|
return $this->toData('1', '最小充值金额无效', []); |
||||
|
} |
||||
|
if(empty($param['min_drawal']) || !is_numeric($param['min_drawal']) || $param['min_drawal'] < 0){ |
||||
|
return $this->toData('1', '最小提现金额无效', []); |
||||
|
} |
||||
|
|
||||
|
$drawal = DrawalSettingModel::where('id', $param['id'])->find(); |
||||
|
if(empty($drawal)){ |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
$drawal->bank_drawal_fee = $param['bank_drawal_fee']; |
||||
|
$drawal->digital_drawal_fee = $param['digital_drawal_fee']; |
||||
|
$drawal->min_recharge = $param['min_recharge']; |
||||
|
$drawal->min_drawal = $param['min_drawal']; |
||||
|
$drawal->save(); |
||||
|
|
||||
|
$fee_key="DRAWAL:FEE:SETTING"; |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key,$param); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,202 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\FeeSettingModel; |
||||
|
use app\model\StockMarketModel; |
||||
|
|
||||
|
class FeeService extends AdminBaseService |
||||
|
{ |
||||
|
// 交易手续费 |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = FeeSettingModel::order('id', 'desc')->select(); |
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows), 'extent' => [ |
||||
|
'market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, 'pay_type' => FeeSettingModel::$payTypeList |
||||
|
]]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
$marketTypeIds = array_keys(StockMarketModel::STOCK_MARKET_TYPE); |
||||
|
if (empty($param['market_type']) || !in_array($param['market_type'], $marketTypeIds)) { |
||||
|
return $this->toData('1', '市场类型无效', []); |
||||
|
} |
||||
|
|
||||
|
if (!is_numeric($param['buy_fee']) || $param['buy_fee'] < 0) { |
||||
|
return $this->toData('1', '买入手续费无效', []); |
||||
|
} |
||||
|
|
||||
|
// if(empty($param['purchase_fee']) || !is_numeric($param['purchase_fee']) || $param['purchase_fee'] < 0){ |
||||
|
// return $this->toData('1', '盘前申购手续费无效', []); |
||||
|
// } |
||||
|
|
||||
|
if (!is_numeric($param['sale_fee']) || $param['sale_fee'] < 0) { |
||||
|
return $this->toData('1', '卖出手续费无效', []); |
||||
|
} |
||||
|
|
||||
|
if (in_array($param['market_type'], [3, 4, 5, 6, 7, 9, 12,14])) { |
||||
|
if (empty($param['purchase_fee']) || !is_numeric($param['purchase_fee']) || $param['purchase_fee'] < 0) { |
||||
|
return $this->toData('1', '申购手续费无效', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 结算方式:0固定费用,1按比例结算 |
||||
|
if (!isset($param['pay_type']) || !in_array($param['pay_type'], array_keys(FeeSettingModel::$payTypeList))) { |
||||
|
return $this->toData('1', '结算方式无效', []); |
||||
|
} |
||||
|
|
||||
|
// 买入最小下单金额 |
||||
|
if (empty($param['min_buy_num']) || !is_numeric($param['min_buy_num']) || ceil($param['min_buy_num']) != $param['min_buy_num']) { |
||||
|
return $this->toData('1', '买入最小下单金额无效', []); |
||||
|
} |
||||
|
|
||||
|
//卖出最小下单金额 |
||||
|
if (empty($param['min_sale_num']) || !is_numeric($param['min_sale_num']) || ceil($param['min_sale_num']) != $param['min_sale_num']) { |
||||
|
return $this->toData('1', '卖出最小下单金额无效', []); |
||||
|
} |
||||
|
|
||||
|
// max_entrust_num |
||||
|
if (empty($param['max_entrust_num']) || !is_numeric($param['max_entrust_num']) || ceil($param['max_entrust_num']) != $param['max_entrust_num']) { |
||||
|
return $this->toData('1', '最大挂单数量无效', []); |
||||
|
} |
||||
|
|
||||
|
// 最大持仓数量 |
||||
|
if (empty($param['max_hold_num']) || !is_numeric($param['max_hold_num']) || ceil($param['max_hold_num']) != $param['max_hold_num']) { |
||||
|
return $this->toData('1', '最大持仓数量无效', []); |
||||
|
} |
||||
|
|
||||
|
$count = FeeSettingModel::where('market_type', $param['market_type'])->count(); |
||||
|
if ($count > 0) { |
||||
|
return $this->toData('1', '市场类型已经存在', []); |
||||
|
} |
||||
|
$feeSetting = new FeeSettingModel; |
||||
|
$feeSetting->market_type = $param['market_type']; |
||||
|
$feeSetting->buy_fee = $param['buy_fee']; |
||||
|
$feeSetting->sale_fee = $param['sale_fee']; |
||||
|
$feeSetting->pay_type = $param['pay_type']; |
||||
|
$feeSetting->purchase_fee = isset($param['purchase_fee']) ? $param['purchase_fee'] : 0; |
||||
|
$feeSetting->min_buy_num = $param['min_buy_num']; |
||||
|
$feeSetting->min_sale_num = $param['min_sale_num']; |
||||
|
$feeSetting->max_entrust_num = $param['max_entrust_num']; |
||||
|
$feeSetting->max_hold_num = $param['max_hold_num']; |
||||
|
$feeSetting->min_withdrawal_num = empty($param['min_withdrawal_num']) ? 0 :$param['min_withdrawal_num']; |
||||
|
$feeSetting->min_recharge_num = empty($param['min_recharge_num']) ? 0 :$param['min_recharge_num']; |
||||
|
|
||||
|
$feeSetting->save(); |
||||
|
|
||||
|
// 设置缓存 |
||||
|
$fee_key = $this->getTradeFeeKey($param['market_type']); |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key, $param); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage(), $exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
$feeSetting = FeeSettingModel::where('id', $param['id'])->find(); |
||||
|
|
||||
|
if (empty($feeSetting)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
$marketTypeIds = array_keys(StockMarketModel::STOCK_MARKET_TYPE); |
||||
|
if (empty($param['market_type']) || !in_array($param['market_type'], $marketTypeIds)) { |
||||
|
return $this->toData('1', '市场类型无效', []); |
||||
|
} |
||||
|
|
||||
|
if (!is_numeric($param['buy_fee']) || $param['buy_fee'] < 0) { |
||||
|
return $this->toData('1', '买入手续费无效', []); |
||||
|
} |
||||
|
|
||||
|
if (in_array($param['market_type'], [3, 4, 5, 6, 7, 9, 12, 14])) { |
||||
|
if (empty($param['purchase_fee']) || !is_numeric($param['purchase_fee']) || $param['purchase_fee'] < 0) { |
||||
|
return $this->toData('1', '申购手续费无效', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (!is_numeric($param['sale_fee']) || $param['sale_fee'] < 0) { |
||||
|
return $this->toData('1', '卖出手续费无效', []); |
||||
|
} |
||||
|
|
||||
|
// if(empty($param['purchase_fee']) || !is_numeric($param['purchase_fee']) || $param['purchase_fee'] < 0){ |
||||
|
// return $this->toData('1', '申购手续费无效', []); |
||||
|
// } |
||||
|
|
||||
|
// 结算方式:0固定费用,1按比例结算 |
||||
|
if (!isset($param['pay_type']) || !in_array($param['pay_type'], array_keys(FeeSettingModel::$payTypeList))) { |
||||
|
return $this->toData('1', '结算方式无效', []); |
||||
|
} |
||||
|
|
||||
|
// 买入最小下单金额 |
||||
|
if (empty($param['min_buy_num']) || !is_numeric($param['min_buy_num']) || ceil($param['min_buy_num']) != $param['min_buy_num']) { |
||||
|
return $this->toData('1', '买入最小下单金额无效', []); |
||||
|
} |
||||
|
|
||||
|
//卖出最小下单金额 |
||||
|
if (empty($param['min_sale_num']) || !is_numeric($param['min_sale_num']) || ceil($param['min_sale_num']) != $param['min_sale_num']) { |
||||
|
return $this->toData('1', '卖出最小下单金额无效', []); |
||||
|
} |
||||
|
|
||||
|
// max_entrust_num |
||||
|
if (empty($param['max_entrust_num']) || !is_numeric($param['max_entrust_num']) || ceil($param['max_entrust_num']) != $param['max_entrust_num']) { |
||||
|
return $this->toData('1', '最大挂单数量无效', []); |
||||
|
} |
||||
|
|
||||
|
// 最大持仓数量 |
||||
|
if (empty($param['max_hold_num']) || !is_numeric($param['max_hold_num']) || ceil($param['max_hold_num']) != $param['max_hold_num']) { |
||||
|
return $this->toData('1', '最大持仓数量无效', []); |
||||
|
} |
||||
|
|
||||
|
$count = FeeSettingModel::where('market_type', $param['market_type'])->where('id', '<>', $feeSetting->id)->count(); |
||||
|
if ($count > 0) { |
||||
|
return $this->toData('1', '市场类型已经存在', []); |
||||
|
} |
||||
|
|
||||
|
$feeSetting->market_type = $param['market_type']; |
||||
|
$feeSetting->buy_fee = $param['buy_fee']; |
||||
|
$feeSetting->sale_fee = $param['sale_fee']; |
||||
|
$feeSetting->pay_type = $param['pay_type']; |
||||
|
$feeSetting->min_buy_num = $param['min_buy_num']; |
||||
|
$feeSetting->purchase_fee = $param['purchase_fee']; |
||||
|
$feeSetting->min_sale_num = $param['min_sale_num']; |
||||
|
$feeSetting->max_entrust_num = $param['max_entrust_num']; |
||||
|
$feeSetting->max_hold_num = $param['max_hold_num']; |
||||
|
|
||||
|
$feeSetting->min_withdrawal_num = empty($param['min_withdrawal_num']) ? 0 :$param['min_withdrawal_num']; |
||||
|
$feeSetting->min_recharge_num = empty($param['min_recharge_num']) ? 0 :$param['min_recharge_num']; |
||||
|
|
||||
|
$feeSetting->save(); |
||||
|
|
||||
|
// 设置缓存 |
||||
|
$fee_key = $this->getTradeFeeKey($param['market_type']); |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($fee_key); |
||||
|
$redis->hMSet($fee_key, $param); |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,270 @@ |
|||||
|
<?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 app\model\ForexListModel; |
||||
|
use think\facade\Cache; |
||||
|
|
||||
|
class ForexService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = ForexListModel::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 = ForexListModel::where('trade_name', $param['trade_name'])->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1', '合约交易对名称已存在', []); |
||||
|
} |
||||
|
|
||||
|
$contract = new ForexListModel; |
||||
|
$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="FOREX: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 = ForexListModel::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 = ForexListModel::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 ForexListModel())->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="FOREX: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 = ForexListModel::where('status', 1)->order('id', 'desc') |
||||
|
->where('is_owner', $param['is_owner']) |
||||
|
->column('trade_name', 'id'); |
||||
|
} else { |
||||
|
$list = ForexListModel::where('status', 1)->order('id', 'desc') |
||||
|
->column('trade_name', 'id'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,133 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\StockInListModel; |
||||
|
use app\model\StockMarketModel; |
||||
|
use app\model\UserInGiveStockOrderModel; |
||||
|
use app\model\UserModel; |
||||
|
use app\utility\ClientGo; |
||||
|
use app\utility\Tool; |
||||
|
use think\facade\Db; |
||||
|
|
||||
|
|
||||
|
// 送股 |
||||
|
class GiveStockService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
// 列表 |
||||
|
public function index($marketType, $param, $adminId) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) { |
||||
|
return $this->toData('1', '分页参数错误'); |
||||
|
} |
||||
|
|
||||
|
$where = []; |
||||
|
$userId = 0; |
||||
|
// 用户号精确搜索 |
||||
|
if (!empty($param['user_no'])) { |
||||
|
$user = UserModel::where('user_no', $param['user_no'])->find(); |
||||
|
if (empty($user)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => StockMarketModel::STOCK_MARKET_TYPE]); |
||||
|
} |
||||
|
$userId = $user['user_id']; |
||||
|
} |
||||
|
|
||||
|
// 判断是否是代理 如果是代理 只能看他自己管理的用户 |
||||
|
$whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId); |
||||
|
if (!is_array($whereU)) { |
||||
|
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => StockMarketModel::STOCK_MARKET_TYPE]); |
||||
|
} |
||||
|
|
||||
|
// 股票号 |
||||
|
if (!empty($param['stock_code']) && is_string($param['stock_code'])) { |
||||
|
$where[] = [ |
||||
|
'stock_code', 'like', '%' . $param['stock_code'] |
||||
|
]; |
||||
|
} |
||||
|
$tableObj = (new IPOService())->getStockModel($marketType); |
||||
|
|
||||
|
$query = Db::table($tableObj['give_order_table'])->where($where)->where($whereU)->with(['user' => function ($query) { |
||||
|
$query->field('user_id,user_no,nick_name,email,phone_number'); |
||||
|
}])->order('id', 'desc'); |
||||
|
$totalQuery = Db::table($tableObj['give_order_table'])->where($where)->where($whereU)->order('id', 'desc'); |
||||
|
$list = $query->page($param['page'], $param['limit'])->select()->toArray(); |
||||
|
$total = $totalQuery->count(); |
||||
|
$stockCodeArr = array_column($list, 'stock_code'); |
||||
|
$stockNameArr = Db::table($tableObj['list_table'])->whereIn('stock_code', $stockCodeArr)->column('stock_name', 'stock_code'); |
||||
|
foreach ($list as &$v) { |
||||
|
$v['stock_name'] = $stockNameArr[$v['stock_code']]; |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list, 'total' => $total, 'extent' => StockMarketModel::STOCK_MARKET_TYPE]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 新增 |
||||
|
public function add($marketType, $param) |
||||
|
{ |
||||
|
try { |
||||
|
// 股票代码 |
||||
|
if (empty($param['stock_code']) || !is_string($param['stock_code'])) { |
||||
|
return $this->toData('1', '股票代码 无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['tape']) || !is_numeric($param['tape'])) { |
||||
|
return $this->toData('1', '交易所 无效'); |
||||
|
} |
||||
|
|
||||
|
$tapeList = (new StockMarketModel)->getAllTape(); |
||||
|
if (strpos($param['stock_code'], ':') !== false) { |
||||
|
$param['stock_code'] = explode(':', $param['stock_code'])[1]; |
||||
|
} |
||||
|
|
||||
|
$tape = $tapeList[$marketType][$param['tape']]; |
||||
|
if ($marketType != 3) $param['stock_code'] = $tape . ':' . $param['stock_code']; |
||||
|
|
||||
|
$tableObj = (new IPOService())->getStockModel($marketType); |
||||
|
$isHas = Db::table($tableObj['list_table'])->where('stock_code', $param['stock_code'])->value('id'); |
||||
|
if (empty($isHas)) return $this->toData('1', '股票 无效'); |
||||
|
|
||||
|
// 股票代码 |
||||
|
if (empty($param['user_id']) || !is_numeric($param['user_id'])) { |
||||
|
return $this->toData('1', '用户 无效'); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['num']) || !is_numeric($param['num']) || $param['num'] <= 0) { |
||||
|
return $this->toData('1', '送股数量 无效'); |
||||
|
} |
||||
|
|
||||
|
$price=!empty($param['price']) ? floatval($param['price']) : 0; |
||||
|
|
||||
|
$date = date('Y-m-d H:i:s'); |
||||
|
$orderNo = (new Tool())->orderNo(20); |
||||
|
$insertArr = [ |
||||
|
'user_id' => $param['user_id'], |
||||
|
'stock_code' => $param['stock_code'], |
||||
|
'order_no' => $orderNo, |
||||
|
'num' => $param['num'], |
||||
|
'price' => $price, |
||||
|
'amount' => $price*$param['num'], |
||||
|
'create_time' => $date, |
||||
|
'update_time' => $date |
||||
|
]; |
||||
|
$insertBool = Db::table($tableObj['give_order_table'])->insert($insertArr); |
||||
|
if ($insertBool) { |
||||
|
// 通知交易 |
||||
|
$bool = (new ClientGo())->giveawaysStock($param['stock_code'], $orderNo, $param['market_type']); |
||||
|
if (!$bool) { |
||||
|
return $this->toData('1', '给交易推送数据异常', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('0', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,175 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\admin\validate\setting\HqValidate; |
||||
|
use app\model\ContractMarketModel; |
||||
|
use think\exception\ValidateException; |
||||
|
|
||||
|
class HqService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = ContractMarketModel::where('type', 0)->order('id', 'desc')->select(); |
||||
|
$rows = []; |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
return $this->toData('0','SUCCSS',['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 新增 |
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(HqValidate::class)->scene('add')->check($param); |
||||
|
|
||||
|
// 已存在未执行的 不能再插入 |
||||
|
$count = ContractMarketModel::where('trade_name', $param['trade_name']) |
||||
|
->where('is_get',1) |
||||
|
->where('type', 0) |
||||
|
->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1','已存在未执行'); |
||||
|
} |
||||
|
|
||||
|
//判断 |
||||
|
$diff = strtotime($param['end_time']) - strtotime($param['begin_time']); |
||||
|
if($diff > 600 || $diff <=0){ |
||||
|
return $this->toData('1','时间无效-结束时间必须在开始时间十分钟以内'); |
||||
|
} |
||||
|
|
||||
|
// 不能有交叉时间 |
||||
|
$map1 = [ |
||||
|
['trade_name', '=',$param['trade_name']], |
||||
|
['begin_time','between', [$param['begin_time'], $param['end_time']]] |
||||
|
]; |
||||
|
$map2 = [ |
||||
|
['trade_name', '=',$param['trade_name']], |
||||
|
['end_time','between', [$param['begin_time'], $param['end_time']]] |
||||
|
]; |
||||
|
|
||||
|
$count = ContractMarketModel::whereOr([$map1,$map2]) |
||||
|
->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1','时间无效-时间不能有交叉'); |
||||
|
} |
||||
|
|
||||
|
$market = new ContractMarketModel; |
||||
|
$market->trade_name = $param['trade_name']; |
||||
|
$market->begin_time = $param['begin_time']; |
||||
|
$market->end_time = $param['end_time']; |
||||
|
$market->max_price = $param['max_price']; |
||||
|
$market->step = $param['step']; |
||||
|
$market->type = 0; |
||||
|
$market->save(); |
||||
|
|
||||
|
// 写入redis |
||||
|
$this->initContractHqData(); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(HqValidate::class)->scene('edit')->check($param); |
||||
|
|
||||
|
// 已存在未执行的 不能再插入 |
||||
|
$count = ContractMarketModel::where('trade_name', $param['trade_name']) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('is_get',1) |
||||
|
->where('type', 0) |
||||
|
->count(); |
||||
|
|
||||
|
if($count > 0){ |
||||
|
return $this->toData('1','已存在未执行'); |
||||
|
} |
||||
|
|
||||
|
// 目标 |
||||
|
$market = ContractMarketModel::where('id', $param['id'])->where('type', 0)->find(); |
||||
|
if(empty($market)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
//判断 |
||||
|
$diff = strtotime($param['end_time']) - strtotime($param['begin_time']); |
||||
|
if($diff > 600 || $diff <=0){ |
||||
|
return $this->toData('1','时间无效'); |
||||
|
} |
||||
|
|
||||
|
// 不能有交叉时间 |
||||
|
$map1 = [ |
||||
|
['trade_name', '=',$param['trade_name']], |
||||
|
['id', '<>',$param['id']], |
||||
|
['begin_time','between', [$param['begin_time'], $param['end_time']]] |
||||
|
]; |
||||
|
$map2 = [ |
||||
|
['trade_name', '=',$param['trade_name']], |
||||
|
['id', '<>',$param['id']], |
||||
|
['end_time','between', [$param['begin_time'], $param['end_time']]] |
||||
|
]; |
||||
|
|
||||
|
$count = ContractMarketModel::whereOr([$map1,$map2]) |
||||
|
->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1','时间无效'); |
||||
|
} |
||||
|
|
||||
|
$market->trade_name = $param['trade_name']; |
||||
|
$market->begin_time = $param['begin_time']; |
||||
|
$market->end_time = $param['end_time']; |
||||
|
$market->max_price = $param['max_price']; |
||||
|
$market->step = $param['step']; |
||||
|
$market->save(); |
||||
|
|
||||
|
// redis |
||||
|
$this->initContractHqData(); |
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage(),$exception->getTrace()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 删除 |
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(HqValidate::class)->scene('del')->check($param); |
||||
|
|
||||
|
// 目标 |
||||
|
$market = ContractMarketModel::where('id', $param['id'])->find(); |
||||
|
if(empty($market)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$market->delete(); |
||||
|
|
||||
|
$this->initContractHqData(); |
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('12', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('11', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,123 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\LanguageSettingModel; |
||||
|
|
||||
|
class LanguageService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = LanguageSettingModel::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['language_name']) || !is_string($param['language_name']) || strlen($param['language_name']) > 20){ |
||||
|
return $this->toData('1','参错错误'); |
||||
|
} |
||||
|
if(empty($param['language_code']) || !is_string($param['language_code']) || strlen($param['language_code']) > 20){ |
||||
|
return $this->toData('1','参错错误'); |
||||
|
} |
||||
|
if(empty($param['china_name']) || !is_string($param['china_name']) || strlen($param['china_name']) > 20){ |
||||
|
return $this->toData('1','参错错误'); |
||||
|
} |
||||
|
|
||||
|
$count = LanguageSettingModel::where('language_code', $param['language_code'])->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1','语言代码已经存在'); |
||||
|
} |
||||
|
|
||||
|
$lang = new LanguageSettingModel; |
||||
|
$lang->language_name = $param['language_name']; |
||||
|
$lang->language_code = $param['language_code']; |
||||
|
$lang->china_name = $param['china_name']; |
||||
|
$lang->save(); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
}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','参错错误1'); |
||||
|
} |
||||
|
|
||||
|
$lang = LanguageSettingModel::where('id', $param['id'])->find(); |
||||
|
if(empty($lang)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['language_name']) || !is_string($param['language_name']) || strlen($param['language_name']) > 20){ |
||||
|
return $this->toData('1','参错错误2'); |
||||
|
} |
||||
|
if(empty($param['language_code']) || !is_string($param['language_code']) || strlen($param['language_code']) > 20){ |
||||
|
return $this->toData('1','参错错误3'); |
||||
|
} |
||||
|
if(empty($param['china_name']) || !is_string($param['china_name']) || strlen($param['china_name']) > 20){ |
||||
|
return $this->toData('1','参错错误4'); |
||||
|
} |
||||
|
|
||||
|
$count = LanguageSettingModel::where('language_code', $param['language_code']) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->count(); |
||||
|
if($count > 0){ |
||||
|
return $this->toData('1','语言代码已经存在'); |
||||
|
} |
||||
|
|
||||
|
$lang->language_name = $param['language_name']; |
||||
|
$lang->language_code = $param['language_code']; |
||||
|
$lang->china_name = $param['china_name']; |
||||
|
$lang->save(); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1','参错错误'); |
||||
|
} |
||||
|
|
||||
|
$lang = LanguageSettingModel::where('id', $param['id'])->find(); |
||||
|
if(empty($lang)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$lang->delete(); |
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function getNameList() |
||||
|
{ |
||||
|
try { |
||||
|
$list = LanguageSettingModel::order('id', 'desc')->column('language_name', 'id'); |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,161 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\admin\validate\setting\MarketValidate; |
||||
|
use app\model\ContractMarketModel; |
||||
|
use think\exception\ValidateException; |
||||
|
|
||||
|
class MarketService extends AdminBaseService |
||||
|
{ |
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = ContractMarketModel::where('type', 1) |
||||
|
->order('id', 'desc') |
||||
|
->select(); |
||||
|
$rows = []; |
||||
|
if(!$list->isEmpty()){ |
||||
|
foreach ($list as $item){ |
||||
|
if(empty($rows[$item['trade_name']])){ |
||||
|
$rows[$item['trade_name']] = [ |
||||
|
'trade_name' => $item['trade_name'], |
||||
|
'begin_time' => $item['begin_time'], |
||||
|
'end_time' => $item['end_time'], |
||||
|
'max_price' => $item['max_price'], |
||||
|
'step' => $item['step'], |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$rows = array_values($rows); |
||||
|
return $this->toData('0','SUCCSS',['list' => $rows, 'total' => count($rows)]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 详情 |
||||
|
public function detail($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['trade_name']) || !is_string($param['trade_name'])){ |
||||
|
return $this->toData('1', '参数错误'); |
||||
|
} |
||||
|
$list = ContractMarketModel::where('type', 1) |
||||
|
->where('trade_name', $param['trade_name']) |
||||
|
->order('id', 'desc')->select(); |
||||
|
$rows = []; |
||||
|
if(!$list->isEmpty()){ |
||||
|
foreach ($list as $item){ |
||||
|
$rows[] = [ |
||||
|
'id' => $item['id'], |
||||
|
'trade_name' => $item['trade_name'], |
||||
|
'end_time' => $item['end_time'], |
||||
|
'begin_time' => $item['begin_time'], |
||||
|
'max_price' => $item['max_price'], |
||||
|
'step' => $item['step'], |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
return $this->toData('0','SUCCSS',['list' => $rows]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 新增 |
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(MarketValidate::class)->scene('add')->check($param); |
||||
|
|
||||
|
// 必须大于当前时间 |
||||
|
if(strtotime($param['end_time']) - time() <= 0){ |
||||
|
return $this->toData('1','时间无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if((strtotime($param['begin_time']) - time()) <= 0 || (strtotime($param['end_time']) - strtotime($param['begin_time'])) <= 0){ |
||||
|
return $this->toData('1','开始时间无效'); |
||||
|
} |
||||
|
|
||||
|
$market = new ContractMarketModel; |
||||
|
$market->trade_name = $param['trade_name']; |
||||
|
$market->begin_time = $param['begin_time']; |
||||
|
$market->end_time = $param['end_time']; |
||||
|
$market->max_price = $param['max_price']; |
||||
|
$market->type = 1; |
||||
|
$market->save(); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(MarketValidate::class)->scene('edit')->check($param); |
||||
|
|
||||
|
// 目标 |
||||
|
$market = ContractMarketModel::where('id', $param['id'])->where('type', 1)->find(); |
||||
|
if(empty($market)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
// 必须大于当前时间 |
||||
|
if(strtotime($param['end_time']) - time() <= 0){ |
||||
|
return $this->toData('1','时间无效'); |
||||
|
} |
||||
|
|
||||
|
if((strtotime($param['begin_time']) - time()) <= 0 || (strtotime($param['end_time']) - strtotime($param['begin_time'])) <= 0){ |
||||
|
return $this->toData('1','开始时间无效'); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
$market->trade_name = $param['trade_name']; |
||||
|
$market->begin_time = $param['begin_time']; |
||||
|
$market->end_time = $param['end_time']; |
||||
|
$market->max_price = $param['max_price']; |
||||
|
$market->save(); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 删除 |
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
// 参数校验 |
||||
|
validate(MarketValidate::class)->scene('del')->check($param); |
||||
|
|
||||
|
// 目标 |
||||
|
$market = ContractMarketModel::where('id', $param['id'])->where('type',1)->find(); |
||||
|
if(empty($market)){ |
||||
|
return $this->toData('1','目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$market->delete(); |
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (ValidateException $validateException){ |
||||
|
return $this->toData('1', $validateException->getMessage(), []); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,327 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\admin\validate\setting\StockValidate; |
||||
|
use app\model\StockOptionInrListModel; |
||||
|
use think\exception\ValidateException; |
||||
|
use PHPMailer\PHPMailer\Exception; |
||||
|
|
||||
|
// 印度期权 |
||||
|
class OptionInService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(StockValidate::class)->scene('in_option_index')->check($param); |
||||
|
|
||||
|
$stockCode = $param['stock_code'] ?? ''; |
||||
|
$where = []; |
||||
|
if ($stockCode) { |
||||
|
$where[] = ['stock_code', '=', $stockCode]; |
||||
|
} |
||||
|
$list = StockOptionInrListModel::where($where)->page($param['page'], $param['limit'])->append(['tape_text', 'status_text'])->order('id', 'desc')->select(); |
||||
|
$total = StockOptionInrListModel::order('id', 'desc')->where($where)->count(); |
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ |
||||
|
'tape_list' => StockOptionInrListModel::$tapeListText, |
||||
|
'status_list' => StockOptionInrListModel::$statusList |
||||
|
]]); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
// 参数校验失败 |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(StockValidate::class)->scene('in_option_add')->check($param); |
||||
|
$info = ''; |
||||
|
if (isset($param['info']) && is_string($param['info'])) { |
||||
|
$info = $param['info']; |
||||
|
} |
||||
|
|
||||
|
// 判断股票交易所 |
||||
|
$tape = '0'; |
||||
|
if (isset($param['tape']) && in_array($param['tape'], array_keys(StockOptionInrListModel::$tapeList))) { |
||||
|
$tape = $param['tape']; |
||||
|
} |
||||
|
|
||||
|
// 判断股票代码是否已经存在 |
||||
|
$count = StockOptionInrListModel::where('stock_code', $param['stock_code'])->count(); |
||||
|
if ($count > 0) { |
||||
|
return $this->toData('1', '股票代码已经存在'); |
||||
|
} |
||||
|
|
||||
|
// 新增数据 |
||||
|
$stockList = new StockOptionInrListModel; |
||||
|
$stockList->stock_name = $param['stock_name']; |
||||
|
$stockList->stock_code = $param['stock_code']; |
||||
|
$stockList->status = $param['status']; |
||||
|
$stockList->rate = $param['rate'] ?? 0; |
||||
|
$stockList->keep_decimal = $param['keep_decimal'] ?? 4; |
||||
|
$stockList->forced_closure = $param['forced_closure'] ?? 30; |
||||
|
$stockList->up_limit = $param['up_limit'] ?? 30; |
||||
|
$stockList->down_limit = $param['down_limit'] ?? 30; |
||||
|
$stockList->info = $info; |
||||
|
$stockList->tape = $tape; |
||||
|
$stockList->create_time = date('Y-m-d H:i:s'); |
||||
|
$stockList->update_time = date('Y-m-d H:i:s'); |
||||
|
$stockList->save(); |
||||
|
|
||||
|
// 新增缓存 |
||||
|
$list_key = "IN:OPTION:LIST:" . $param['stock_code']; |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($list_key); |
||||
|
$redis->hMset($list_key, [ |
||||
|
'stock_name' => $param['stock_name'], |
||||
|
'stock_code' => $param['stock_code'], |
||||
|
'status' => $param['status'], |
||||
|
'keep_decimal' => $param['keep_decimal'] ?? 4, |
||||
|
'forced_closure' => $param['forced_closure'] ?? 30, |
||||
|
'up_limit' => $param['up_limit'] ?? 30, |
||||
|
'down_limit' => $param['down_limit'] ?? 30, |
||||
|
'rate' => $param['rate'] ?? 0, |
||||
|
'info' => $info, |
||||
|
'tape' => $tape, |
||||
|
]); |
||||
|
|
||||
|
// 给行情推送 |
||||
|
// $bool = $this->sendDecimalToGo('Indonesia', $stockList->stock_code, $stockList->keep_decimal); |
||||
|
// $bool = $this->sendNewStockToGo('India', $stockList->stock_code, $stockList->stock_name, StockOptionInrListModel::$tapeList[$tape]); |
||||
|
|
||||
|
// if (!$bool) { |
||||
|
// return $this->toData('1', '数据设置成功 但给行情推送数据异常', []); |
||||
|
// } |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
|
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(StockValidate::class)->scene('in_option_edit')->check($param); |
||||
|
|
||||
|
$stockList = StockOptionInrListModel::where('id', $param['id'])->find(); |
||||
|
if (empty($stockList)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
$info = ''; |
||||
|
if (isset($param['info']) && is_string($param['info'])) { |
||||
|
$info = $param['info']; |
||||
|
} |
||||
|
|
||||
|
// 判断股票交易所 |
||||
|
$tape = '0'; |
||||
|
if (isset($param['tape']) && in_array($param['tape'], array_keys(StockOptionInrListModel::$tapeList))) { |
||||
|
$tape = $param['tape']; |
||||
|
} |
||||
|
|
||||
|
// 判断股票代码是否已经存在 |
||||
|
$count = StockOptionInrListModel::where('stock_code', $param['stock_code'])->where('id', '<>', $param['id'])->count(); |
||||
|
if ($count > 0) { |
||||
|
return $this->toData('1', '股票代码已经存在'); |
||||
|
} |
||||
|
|
||||
|
// 修改数据 |
||||
|
$stockList->stock_name = $param['stock_name']; |
||||
|
$stockList->stock_code = $param['stock_code']; |
||||
|
$stockList->status = $param['status']; |
||||
|
$stockList->rate = $param['rate'] ?? 0; |
||||
|
$stockList->keep_decimal = $param['keep_decimal'] ?? 4; |
||||
|
$stockList->forced_closure = $param['forced_closure'] ?? 30; |
||||
|
$stockList->up_limit = $param['up_limit'] ?? 30; |
||||
|
$stockList->down_limit = $param['down_limit'] ?? 30; |
||||
|
$stockList->info = $info; |
||||
|
$stockList->tape = $tape; |
||||
|
$stockList->update_time = date('Y-m-d H:i:s'); |
||||
|
$stockList->save(); |
||||
|
|
||||
|
// 新增缓存 |
||||
|
$list_key = "IN:OPTION:LIST:" . $param['stock_code']; |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($list_key); |
||||
|
$redis->hMset($list_key, [ |
||||
|
'stock_name' => $param['stock_name'], |
||||
|
'stock_code' => $param['stock_code'], |
||||
|
'status' => $param['status'], |
||||
|
'keep_decimal' => $param['keep_decimal'] ?? 4, |
||||
|
'forced_closure' => $param['forced_closure'] ?? 30, |
||||
|
'up_limit' => $param['up_limit'] ?? 30, |
||||
|
'down_limit' => $param['down_limit'] ?? 30, |
||||
|
'rate' => $param['rate'] ?? 0, |
||||
|
'info' => $info, |
||||
|
'tape' => $tape, |
||||
|
]); |
||||
|
|
||||
|
// 给行情推送 |
||||
|
// $bool = $this->sendNewStockToGo('India', $stockList->stock_code, $stockList->stock_name, StockOptionInrListModel::$tapeList[$tape]); |
||||
|
// |
||||
|
// if (!$bool) { |
||||
|
// return $this->toData('1', '数据设置成功 但给行情推送数据异常', []); |
||||
|
// } |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
|
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 列表 |
||||
|
public function getTradeNameList() |
||||
|
{ |
||||
|
try { |
||||
|
$list = StockOptionInrListModel::where('status', 1)->order('id', 'desc')->column('stock_name', 'id'); |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function refresh() |
||||
|
{ |
||||
|
try { |
||||
|
|
||||
|
$ch = curl_init(); |
||||
|
|
||||
|
$url = env('OPTION_REFRESH.OPTION_REFRESH_IN_URL'); |
||||
|
|
||||
|
curl_setopt($ch, CURLOPT_URL, $url); // Set the URL |
||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the response as a string |
||||
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow any redirects |
||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // This should be set to true in production, disables SSL certificate verification (only for testing) |
||||
|
|
||||
|
$response = curl_exec($ch); |
||||
|
if (curl_errno($ch)) { |
||||
|
echo 'Curl error: ' . curl_error($ch); |
||||
|
} |
||||
|
|
||||
|
curl_close($ch); |
||||
|
|
||||
|
$data = json_decode($response, true); |
||||
|
if (empty($data) || empty($data['data']) || empty($data['code']) || (!empty($data['code']) && $data['code'] != 200)) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
$now = date('Y-m-d H:i:s'); // 订单时间 |
||||
|
$insertArr = []; |
||||
|
$responseCodeArr = array_column($data['data'], 'Code'); |
||||
|
$dataCodeArr = StockOptionInrListModel::column('stock_code'); |
||||
|
$result = array_diff($responseCodeArr, $dataCodeArr); |
||||
|
foreach ($data['data'] as $v) { |
||||
|
if (in_array($v['Code'], $result)) { |
||||
|
$insertArr[] = [ |
||||
|
'stock_name' => $v['Code'], |
||||
|
'stock_code' => $v['Code'], |
||||
|
'status' => 1, |
||||
|
'tape' => StockOptionInrListModel::$tapeList[$v['Exchange']] ?? 1, |
||||
|
'keep_decimal' => 4, |
||||
|
'create_time' => $now, |
||||
|
'update_time' => $now, |
||||
|
'rate' => 30, |
||||
|
'forced_closure' => 30, |
||||
|
'up_limit' => 30, |
||||
|
'down_limit' => 30 |
||||
|
]; |
||||
|
} |
||||
|
} |
||||
|
$StockOptionInrListModel = new StockOptionInrListModel(); |
||||
|
$StockOptionInrListModel::insertAll($insertArr); |
||||
|
|
||||
|
$redis = $this->getRedis(); |
||||
|
foreach ($insertArr as $cacheV) { |
||||
|
$list_key = "IN:OPTION:LIST:" . $cacheV['stock_code']; |
||||
|
$redis->del($list_key); |
||||
|
$redis->hMset($list_key, [ |
||||
|
'stock_name' => $cacheV['stock_name'], |
||||
|
'stock_code' => $cacheV['stock_code'], |
||||
|
'status' => $cacheV['status'], |
||||
|
'keep_decimal' => $cacheV['keep_decimal'], |
||||
|
'forced_closure' => $cacheV['forced_closure'], |
||||
|
'up_limit' => $cacheV['up_limit'], |
||||
|
'down_limit' => $cacheV['down_limit'], |
||||
|
'rate' => $cacheV['rate'], |
||||
|
'info' => '', |
||||
|
'tape' => $cacheV['tape'], |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} catch (\Exception $exception) { |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function batchEdit($param) |
||||
|
{ |
||||
|
try { |
||||
|
$rate = $param['rate']; |
||||
|
$keep_decimal = $param['keep_decimal']; |
||||
|
$forced_closure = $param['forced_closure']; |
||||
|
$status = $param['status']; |
||||
|
$updateArr = ['rate' => $rate, 'keep_decimal' => $keep_decimal, 'forced_closure' => $forced_closure, 'status' => $status, 'update_time' => date('Y-m-d H:i:s')]; |
||||
|
StockOptionInrListModel::where(1, '=', 1)->update($updateArr); |
||||
|
|
||||
|
$dataCodeArr = StockOptionInrListModel::select()->toArray(); |
||||
|
$redis = $this->getRedis(); |
||||
|
foreach ($dataCodeArr as $cacheV) { |
||||
|
$list_key = "IN:OPTION:LIST:" . $cacheV['stock_code']; |
||||
|
$redis->del($list_key); |
||||
|
$redis->hMset($list_key, [ |
||||
|
'stock_name' => $cacheV['stock_name'], |
||||
|
'stock_code' => $cacheV['stock_code'], |
||||
|
'status' => $cacheV['status'], |
||||
|
'keep_decimal' => $cacheV['keep_decimal'], |
||||
|
'forced_closure' => $cacheV['forced_closure'], |
||||
|
'up_limit' => $cacheV['up_limit'], |
||||
|
'down_limit' => $cacheV['down_limit'], |
||||
|
'rate' => $cacheV['rate'], |
||||
|
'info' => $cacheV['info'], |
||||
|
'tape' => $cacheV['tape'], |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function onOff($param) |
||||
|
{ |
||||
|
try { |
||||
|
$id = $param['id']; |
||||
|
$stockList = StockOptionInrListModel::where('id', $param['id'])->find(); |
||||
|
if (empty($stockList)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
$status = $stockList->status == 0 ? 1 : 0; |
||||
|
$updateArr = ['status' => $status, 'update_time' => date('Y-m-d H:i:s')]; |
||||
|
StockOptionInrListModel::where('id', $id)->update($updateArr); |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,154 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\admin\validate\setting\PaymentValidate; |
||||
|
use app\admin\validate\setting\StockValidate; |
||||
|
use app\model\PaymentListModel; |
||||
|
use app\model\StockListModel; |
||||
|
use PHPMailer\PHPMailer\Exception; |
||||
|
use think\exception\ValidateException; |
||||
|
use think\facade\Validate; |
||||
|
|
||||
|
class PaymentService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(PaymentValidate::class)->scene('payment_index')->check($param); |
||||
|
$list = PaymentListModel::order('id', 'desc')->page($param['page'], $param['limit'])->select(); |
||||
|
$total = PaymentListModel::order('id', 'desc')->count(); |
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => ['type_list' => PaymentListModel::TPYE_LIST]]); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
// 参数校验失败 |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(PaymentValidate::class)->scene('payment_add')->check($param); |
||||
|
// 新增数据 |
||||
|
$payment = new PaymentListModel(); |
||||
|
$payment->country = $param['country']; |
||||
|
$payment->channel = $param['channel']; |
||||
|
$payment->pay_type = $param['pay_type']; |
||||
|
$payment->service_rate = $param['service_rate']; |
||||
|
$payment->type = $param['type'] ?? 1; |
||||
|
$payment->status = $param['status']; |
||||
|
$payment->channel_type = $param['channel_type']; |
||||
|
// $payment->exchange_rate = $param['exchange_rate']; |
||||
|
$payment->is_recharge = $param['is_recharge']; |
||||
|
$payment->is_withdrawal = $param['is_withdrawal']; |
||||
|
$payment->is_online = $param['is_online']; |
||||
|
if (isset($param['bank_name'])) { |
||||
|
$payment->bank_name = $param['bank_name']; |
||||
|
} |
||||
|
if (isset($param['bank_branch'])) { |
||||
|
$payment->bank_branch = $param['bank_branch']; |
||||
|
} |
||||
|
if (isset($param['bank_user'])) { |
||||
|
$payment->bank_user = $param['bank_user']; |
||||
|
} |
||||
|
if (isset($param['bank_account'])) { |
||||
|
$payment->bank_account = $param['bank_account']; |
||||
|
} |
||||
|
if (isset($param['wallet_address'])) { |
||||
|
$payment->wallet_address = $param['wallet_address']; |
||||
|
} |
||||
|
if (isset($param['unit'])) { |
||||
|
$payment->unit = $param['unit']; |
||||
|
} |
||||
|
if (isset($param['account_type'])) { |
||||
|
$payment->account_type = $param['account_type']; |
||||
|
} |
||||
|
if (isset($param['ifsc'])) { |
||||
|
$payment->ifsc = $param['ifsc']; |
||||
|
} |
||||
|
if (isset($param['extra_name'])) { |
||||
|
$payment->extra_name = $param['extra_name']; |
||||
|
} |
||||
|
if (isset($param['extra_list'])) { |
||||
|
$payment->extra_list = $param['extra_list']; |
||||
|
} |
||||
|
$payment->save(); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
|
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(PaymentValidate::class)->scene('payment_edit')->check($param); |
||||
|
|
||||
|
$payment_info = PaymentListModel::where('id', $param['id'])->find(); |
||||
|
if (empty($payment_info)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
$param['type'] = $param['type'] ?? 1; |
||||
|
PaymentListModel::where('id', $param['id'])->update($param); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
|
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function info($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(PaymentValidate::class)->scene('payment_info')->check($param); |
||||
|
$payment_info = PaymentListModel::where('id', $param['id'])->find(); |
||||
|
if (empty($payment_info)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', $payment_info->toArray()); |
||||
|
|
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
validate(PaymentValidate::class)->scene('payment_info')->check($param); |
||||
|
$payment_info = PaymentListModel::where('id', $param['id'])->find(); |
||||
|
if (empty($payment_info)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
PaymentListModel::where('id', $param['id'])->delete(); |
||||
|
return $this->toData('0', 'SUCCESS', []); |
||||
|
} catch (ValidateException $validateException) { |
||||
|
$message = $validateException->getError(); |
||||
|
return $this->toData('1', $message); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,690 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\PreFundStockModel; |
||||
|
use app\model\HistoryFundStockModel; |
||||
|
use app\model\PreFundStockReferModel; |
||||
|
use app\model\UserFundPreStockOrderModel; |
||||
|
use app\model\UserStockFundInterestReceiptModel; |
||||
|
use app\model\UserStockFundLogModel; |
||||
|
use app\model\UserStockFundModel; |
||||
|
use think\facade\Db; |
||||
|
use think\facade\Log; |
||||
|
use DatePeriod; |
||||
|
use DateTime; |
||||
|
use DateInterval; |
||||
|
|
||||
|
class PreFundStockService 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', '=', PreFundStockModel::IS_DELETE_NO |
||||
|
]; |
||||
|
// 基金号 |
||||
|
if (!empty($param['stock_code']) && is_string($param['stock_code'])) { |
||||
|
$where[] = [ |
||||
|
'stock_code', '=', $param['stock_code'] |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
$query = PreFundStockModel::where($where)->withJoin(['history' => ['stock_code', 'start_date', 'end_date', 'start_point', 'end_point']])->order('id', 'desc'); |
||||
|
$totalQuery = PreFundStockModel::where($where)->order('id', 'desc'); |
||||
|
if (!empty($param['open_status']) && in_array($param['open_status'], PreFundStockModel::$openStatusList)) { |
||||
|
$query = $query->where('open_status', $param['open_status']); |
||||
|
$totalQuery = $totalQuery->where('open_status', $param['open_status']); |
||||
|
} |
||||
|
|
||||
|
$list = $query->append(['stock_type_text', 'open_status_text'])->order('id', 'desc')->page($param['page'], $param['limit'])->select(); |
||||
|
$total = $totalQuery->order('id', 'desc')->count(); |
||||
|
$rows = []; |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
foreach ($rows as $key => $item) { |
||||
|
$rows[$key]['product_file'] = json_decode($item['product_file'], true); |
||||
|
$rows[$key]['current_manager'] = json_decode($item['current_manager'], true); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => $total, 'extend' => [ |
||||
|
'open_status_list' => PreFundStockModel::$openStatusList, |
||||
|
'stock_type_list' => PreFundStockModel::$stockTypeList, |
||||
|
'interest_type_list' => PreFundStockModel::$interestTypeList, |
||||
|
'cycle_type_list' => PreFundStockModel::$cycleTypeList, |
||||
|
'symbol' => 'USD' |
||||
|
|
||||
|
]]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 历史走势 |
||||
|
public function history($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['stock_code'])) { |
||||
|
return $this->toData('1', '基本代码 无效'); |
||||
|
} |
||||
|
$history = HistoryFundStockModel::where('stock_code', $param['stock_code'])->value('history_info'); |
||||
|
$history = json_decode($history, true); |
||||
|
return $this->toData('0', 'SUCCESS', ['history_info' => $history]); |
||||
|
} 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['stock_name']) || !is_string($param['stock_name'])) { |
||||
|
return $this->toData('1', '基金名称 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金类型 |
||||
|
if (empty($param['stock_type']) || !in_array($param['stock_type'], array_keys(PreFundStockModel::$stockTypeList))) { |
||||
|
return $this->toData('1', '基金类型 无效'); |
||||
|
} |
||||
|
|
||||
|
// 返利类型 |
||||
|
if (empty($param['interest_type']) || !in_array($param['interest_type'], array_keys(PreFundStockModel::$interestTypeList))) { |
||||
|
return $this->toData('1', '返利类型 无效'); |
||||
|
} |
||||
|
|
||||
|
// 周期单位 |
||||
|
if (empty($param['cycle_type']) || !in_array($param['cycle_type'], array_keys(PreFundStockModel::$cycleTypeList))) { |
||||
|
return $this->toData('1', '返利类型 无效'); |
||||
|
} |
||||
|
|
||||
|
// 收益率 两位小数 |
||||
|
if (empty($param['rate']) || !is_numeric($param['rate']) || $param['rate'] <= 0) { |
||||
|
return $this->toData('1', '基金收益率 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金周期 |
||||
|
if (empty($param['cycle']) || !is_numeric($param['cycle']) || $param['cycle'] <= 0) { |
||||
|
return $this->toData('1', '基金周期 无效'); |
||||
|
} |
||||
|
|
||||
|
// 最低申购价格 |
||||
|
if (empty($param['min_price']) || !is_numeric($param['min_price']) || $param['min_price'] <= 0) { |
||||
|
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'])) { |
||||
|
return $this->toData('1', '认购结束时间 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金logo |
||||
|
if (empty($param['logo']) || !is_string($param['logo'])) { |
||||
|
return $this->toData('1', '基金logo 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金标签 |
||||
|
$tag = ""; |
||||
|
if (!empty($param['tag']) && is_string($param['tag'])) { |
||||
|
$tag = $param['tag']; |
||||
|
} |
||||
|
|
||||
|
// 认购结束时间要大于 认购开始时间 |
||||
|
if (strtotime($param['end_time']) <= strtotime($param['start_time'])) { |
||||
|
return $this->toData('1', ' 认购结束时间 晚于 认购开始时间'); |
||||
|
} |
||||
|
|
||||
|
// 1.0 判断基金号是否已经存在 |
||||
|
$preStock = PreFundStockModel::where('stock_code', $param['stock_code'])->find(); |
||||
|
if (!empty($preStock)) { |
||||
|
return $this->toData('1', '基金号已经存在'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 起始日期 |
||||
|
if (empty($param['start_date']) || !is_string($param['start_date'])) { |
||||
|
return $this->toData('1', '历史走势 起始日期 无效'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 结束日期 |
||||
|
if (empty($param['end_date']) || !is_string($param['end_date'])) { |
||||
|
return $this->toData('1', '历史走势 结束日期 无效'); |
||||
|
} |
||||
|
|
||||
|
if (strtotime($param['end_date']) <= strtotime($param['start_date']) || strtotime($param['end_date']) - time() > 0) { |
||||
|
return $this->toData('1', '历史走势-开始日期 要大于 历史走势-结束日期 ; 历史走势-结束日期 要小于 当前时间'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 起始值 |
||||
|
if (empty($param['start_point']) || !is_numeric($param['start_point'])) { |
||||
|
return $this->toData('1', '历史走势 起始值 无效'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 结束值 |
||||
|
if (empty($param['end_point']) || !is_numeric($param['end_point'])) { |
||||
|
return $this->toData('1', '历史走势 结束值 无效'); |
||||
|
} |
||||
|
|
||||
|
Db::startTrans(); |
||||
|
// 新增数据 |
||||
|
$preFundStock = new PreFundStockModel(); |
||||
|
$preFundStock->stock_code = $param['stock_code']; |
||||
|
$preFundStock->stock_name = $param['stock_name']; |
||||
|
$preFundStock->stock_type = $param['stock_type']; |
||||
|
$preFundStock->show_interest = $param['show_interest'] ?? 66; |
||||
|
$preFundStock->tape = $param['tape'] ?? 1; |
||||
|
$preFundStock->status = $param['status'] ?? 0; |
||||
|
$preFundStock->min_price = $param['min_price']; |
||||
|
$preFundStock->rate = $param['rate']; |
||||
|
$preFundStock->cycle = $param['cycle']; |
||||
|
$preFundStock->start_time = $param['start_time']; |
||||
|
$preFundStock->end_time = $param['end_time']; |
||||
|
$preFundStock->sort = $param['sort'] ?? 0; |
||||
|
$preFundStock->interest_type = $param['interest_type']; |
||||
|
$preFundStock->cycle_type = $param['cycle_type']; |
||||
|
$preFundStock->phase_count = $param['phase_count'] ?? 1; |
||||
|
|
||||
|
$preFundStock->is_delete = PreFundStockModel::IS_DELETE_NO; |
||||
|
$preFundStock->open_status = PreFundStockModel::OPEN_STATUS_NO; |
||||
|
$preFundStock->create_time = date('Y-m-d H:i:s'); |
||||
|
$preFundStock->update_time = date('Y-m-d H:i:s'); |
||||
|
|
||||
|
$preFundStock->stock_info = $param['stock_info'] ?? ""; |
||||
|
$preFundStock->logo = $param['logo']; |
||||
|
$preFundStock->tag = $tag; |
||||
|
$preFundStock->remark = $param['remark']; |
||||
|
$preFundStock->product_file = json_encode($param['product_file']); |
||||
|
$preFundStock->current_manager = json_encode($param['current_manager']); |
||||
|
$preFundStockBool = $preFundStock->save(); |
||||
|
if (!$preFundStockBool) { |
||||
|
Db::rollback(); |
||||
|
return $this->toData('1', '新增基金失败'); |
||||
|
} |
||||
|
|
||||
|
// 基金历史走势 |
||||
|
$HistoryStock = new HistoryFundStockModel(); |
||||
|
$HistoryStock->stock_code = $param['stock_code']; |
||||
|
$HistoryStock->start_date = $param['start_date']; |
||||
|
$HistoryStock->end_date = $param['end_date']; |
||||
|
$HistoryStock->start_point = $param['start_point']; |
||||
|
$HistoryStock->end_point = $param['end_point']; |
||||
|
$HistoryStock->history_info = $this->autoHistory($param['start_date'], $param['end_date'], $param['start_point'], $param['end_point']); |
||||
|
$HistoryStockBool = $HistoryStock->save(); |
||||
|
if (!$HistoryStockBool) { |
||||
|
Db::rollback(); |
||||
|
return $this->toData('1', '新增基金走势失败'); |
||||
|
} |
||||
|
|
||||
|
Db::commit(); |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
Db::rollback(); |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 编辑 |
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
$preFundStock = PreFundStockModel::where('id', $param['id'])->where('is_delete', PreFundStockModel::IS_DELETE_NO)->find(); |
||||
|
if (empty($preFundStock)) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
// 已中签或者已上市不支持修改 |
||||
|
// if ($preFundStock->open_status == PreFundStockModel::OPEN_STATUS_HAD) { |
||||
|
// return $this->toData('1', '已上市 不支持修改'); |
||||
|
// } |
||||
|
|
||||
|
// 基金类型 |
||||
|
if (empty($param['stock_type']) || !in_array($param['stock_type'], array_keys(PreFundStockModel::$stockTypeList))) { |
||||
|
return $this->toData('1', '基金类型 无效'); |
||||
|
} |
||||
|
|
||||
|
if ($preFundStock->had_get_price == 0) { |
||||
|
// 基金代码 |
||||
|
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['min_price']) || !is_numeric($param['min_price']) || $param['min_price'] <= 0) { |
||||
|
return $this->toData('1', '最低申购金额 无效'); |
||||
|
} |
||||
|
|
||||
|
// 开始认购时间 |
||||
|
if (empty($param['start_time']) || !is_string($param['start_time'])) { |
||||
|
return $this->toData('1', '开始认购时间 无效'); |
||||
|
} |
||||
|
|
||||
|
// 收益率 两位小数 |
||||
|
if (empty($param['rate']) || !is_numeric($param['rate']) || $param['rate'] <= 0) { |
||||
|
return $this->toData('1', '基金收益率 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金周期 |
||||
|
if (empty($param['cycle']) || !is_numeric($param['cycle']) || $param['cycle'] <= 0) { |
||||
|
return $this->toData('1', '基金周期 无效'); |
||||
|
} |
||||
|
|
||||
|
// 返利类型 |
||||
|
if (empty($param['interest_type']) || !in_array($param['interest_type'], array_keys(PreFundStockModel::$interestTypeList))) { |
||||
|
return $this->toData('1', '返利类型 无效'); |
||||
|
} |
||||
|
|
||||
|
// 周期单位 |
||||
|
if (empty($param['cycle_type']) || !in_array($param['cycle_type'], array_keys(PreFundStockModel::$cycleTypeList))) { |
||||
|
return $this->toData('1', '返利类型 无效'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 认购结束时间 |
||||
|
if (empty($param['end_time']) || !is_string($param['end_time'])) { |
||||
|
return $this->toData('1', '认购结束时间 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金logo |
||||
|
if (empty($param['logo']) || !is_string($param['logo'])) { |
||||
|
return $this->toData('1', '基金logo 无效'); |
||||
|
} |
||||
|
|
||||
|
// 基金标签 |
||||
|
$tag = ""; |
||||
|
if (!empty($param['tag']) && is_string($param['tag'])) { |
||||
|
$tag = $param['tag']; |
||||
|
} |
||||
|
|
||||
|
// 历史走势 起始日期 |
||||
|
if (empty($param['start_date']) || !is_string($param['start_date'])) { |
||||
|
return $this->toData('1', '历史走势 起始日期 无效'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 结束日期 |
||||
|
if (empty($param['end_date']) || !is_string($param['end_date'])) { |
||||
|
return $this->toData('1', '历史走势 结束日期 无效'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 起始值 |
||||
|
if (empty($param['start_point']) || !is_numeric($param['start_point'])) { |
||||
|
return $this->toData('1', '历史走势 起始值 无效'); |
||||
|
} |
||||
|
|
||||
|
// 历史走势 结束值 |
||||
|
if (empty($param['end_point']) || !is_numeric($param['end_point'])) { |
||||
|
return $this->toData('1', '历史走势 结束值 无效'); |
||||
|
} |
||||
|
|
||||
|
// 上市时间 要大于 认购结束时间 认购结束时间要大于 认购开始时间 |
||||
|
if (strtotime($param['end_time']) <= strtotime($param['start_time'])) { |
||||
|
return $this->toData('1', '认购结束时间 要晚于 认购开始时间'); |
||||
|
} |
||||
|
|
||||
|
// 1.0 判断基金号是否已经存在 |
||||
|
$preStock = PreFundStockModel::where('stock_code', $param['stock_code']) |
||||
|
->where('id', '<>', $param['id']) |
||||
|
->where('is_delete', PreFundStockModel::IS_DELETE_NO)->find(); |
||||
|
if (!empty($preStock)) { |
||||
|
return $this->toData('1', '基金号已经存在'); |
||||
|
} |
||||
|
|
||||
|
Db::startTrans(); |
||||
|
// 编辑数据 |
||||
|
if ($preFundStock->had_get_price == 0) { |
||||
|
$UpdatePreFundStockArr['stock_code'] = $param['stock_code']; |
||||
|
$UpdatePreFundStockArr['stock_name'] = $param['stock_name']; |
||||
|
$UpdatePreFundStockArr['status'] = $param['status'] ?? 0; |
||||
|
$UpdatePreFundStockArr['min_price'] = $param['min_price']; |
||||
|
$UpdatePreFundStockArr['start_time'] = $param['start_time']; |
||||
|
$UpdatePreFundStockArr['rate'] = $param['rate']; |
||||
|
$UpdatePreFundStockArr['cycle'] = $param['cycle']; |
||||
|
$UpdatePreFundStockArr['interest_type'] = $param['interest_type']; |
||||
|
$UpdatePreFundStockArr['cycle_type'] = $param['cycle_type']; |
||||
|
$UpdatePreFundStockArr['phase_count'] = $param['phase_count'] ?? 1; |
||||
|
$UpdatePreFundStockArr['tape'] = $param['tape'] ?? 1; |
||||
|
} |
||||
|
|
||||
|
$UpdatePreFundStockArr['show_interest'] = $param['show_interest'] ?? 66; |
||||
|
$UpdatePreFundStockArr['end_time'] = $param['end_time']; |
||||
|
$UpdatePreFundStockArr['is_delete'] = PreFundStockModel::IS_DELETE_NO; |
||||
|
$UpdatePreFundStockArr['update_time'] = date('Y-m-d H:i:s'); |
||||
|
$UpdatePreFundStockArr['sort'] = $param['sort'] ?? 0; |
||||
|
|
||||
|
$UpdatePreFundStockArr['stock_info'] = $param['stock_info'] ?? ""; |
||||
|
$UpdatePreFundStockArr['logo'] = $param['logo']; |
||||
|
$UpdatePreFundStockArr['tag'] = $tag; |
||||
|
$UpdatePreFundStockArr['remark'] = $param['remark']; |
||||
|
$UpdatePreFundStockArr['product_file'] = json_encode($param['product_file']); |
||||
|
$UpdatePreFundStockArr['current_manager'] = json_encode($param['current_manager']); |
||||
|
$UpdatePreFundStockBool = PreFundStockModel::where('id', $param['id'])->update($UpdatePreFundStockArr); |
||||
|
if (!$UpdatePreFundStockBool) { |
||||
|
Db::rollback(); |
||||
|
return $this->toData('1', '编辑基金失败'); |
||||
|
} |
||||
|
|
||||
|
// 基金历史走势 |
||||
|
$HistoryStockArr['stock_code'] = $param['stock_code']; |
||||
|
$HistoryStockArr['start_date'] = $param['start_date']; |
||||
|
$HistoryStockArr['end_date'] = $param['end_date']; |
||||
|
$HistoryStockArr['start_point'] = $param['start_point']; |
||||
|
$HistoryStockArr['end_point'] = $param['end_point']; |
||||
|
$HistoryStockArr['history_info'] = $this->autoHistory($param['start_date'], $param['end_date'], $param['start_point'], $param['end_point']); |
||||
|
$HistoryStock = HistoryFundStockModel::where('stock_code', $param['stock_code'])->find(); |
||||
|
if (empty($HistoryStock)) { |
||||
|
HistoryFundStockModel::where('stock_code', $preFundStock->stock_code)->delete(); |
||||
|
$HistoryStockBool = HistoryFundStockModel::create($HistoryStockArr); |
||||
|
} else { |
||||
|
$HistoryStockBool = HistoryFundStockModel::where('stock_code', $param['stock_code'])->update($HistoryStockArr); |
||||
|
} |
||||
|
if (!$HistoryStockBool) { |
||||
|
Db::rollback(); |
||||
|
return $this->toData('1', '编辑基金走势失败'); |
||||
|
} |
||||
|
|
||||
|
Db::commit(); |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
Db::rollback(); |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 上市 |
||||
|
public function open($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
// $isReal = 1; |
||||
|
// if (isset($param['is_real']) && is_numeric($param['is_real']) && $param['is_real'] == '2') { |
||||
|
// $isReal = 2; |
||||
|
// } |
||||
|
|
||||
|
$preFundStock = PreFundStockModel::where('id', $param['id'])->where('is_delete', PreFundStockModel::IS_DELETE_NO)->find(); |
||||
|
if (empty($preFundStock)) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
// 判断是否签名 |
||||
|
// if ($preFundStock->sign_status != PreFundStockModel::SIGN_STATUS_DONE) { |
||||
|
// return $this->toData('1', '还未签名'); |
||||
|
// } |
||||
|
|
||||
|
// if ($preFundStock->open_status != PreFundStockModel::OPEN_STATUS_NO) { |
||||
|
// return $this->toData('1', '无法操作'); |
||||
|
// } |
||||
|
|
||||
|
// 修改基金状态 |
||||
|
$num = PreFundStockModel::where('id', $preFundStock->id)->update(['open_status' => PreFundStockModel::OPEN_STATUS_HAD, |
||||
|
'open_time' => date('Y-m-d H:i:s'), |
||||
|
'update_time' => date('Y-m-d H:i:s')]); |
||||
|
|
||||
|
if ($num <= 0) { |
||||
|
return $this->toData('1', '基金状态修改失败-上市'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
Log::error("基金上市失败 " . $exception->getMessage()); |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 退市 |
||||
|
public function close($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
$preFundStock = PreFundStockModel::where('id', $param['id'])->where('is_delete', PreFundStockModel::IS_DELETE_NO)->find(); |
||||
|
if (empty($preFundStock)) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
if ($preFundStock->open_status != PreFundStockModel::OPEN_STATUS_HAD) { |
||||
|
return $this->toData('1', '上市中 无法操作'); |
||||
|
} |
||||
|
|
||||
|
// 修改基金状态 |
||||
|
$num = PreFundStockModel::where('id', $preFundStock->id)->update(['open_status' => PreFundStockModel::OPEN_STATUS_OUT, |
||||
|
'close_time' => date('Y-m-d H:i:s'), |
||||
|
'update_time' => date('Y-m-d H:i:s')]); |
||||
|
|
||||
|
if ($num <= 0) { |
||||
|
return $this->toData('1', '基金状态修改失败-退市'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
Log::error("基金退市失败 " . $exception->getMessage()); |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 删除 |
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
$preFundStock = PreFundStockModel::where('id', $param['id'])->where('is_delete', PreFundStockModel::IS_DELETE_NO)->find(); |
||||
|
if (empty($preFundStock)) { |
||||
|
return $this->toData('1', '主键 无效'); |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
if ($preFundStock->open_status != PreFundStockModel::OPEN_STATUS_HAD) { |
||||
|
return $this->toData('1', '上市中 无法操作'); |
||||
|
} |
||||
|
|
||||
|
// 修改删除状态 |
||||
|
$num = PreFundStockModel::where('id', $preFundStock->id)->update([ |
||||
|
'is_delete' => PreFundStockModel::IS_DELETE_YES, |
||||
|
'update_time' => date('Y-m-d H:i:s')]); |
||||
|
|
||||
|
if ($num <= 0) { |
||||
|
return $this->toData('1', '基金删除失败'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
Log::error("基金删除失败 " . $exception->getMessage()); |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private function autoHistory($startDate, $endDate, $startPoint, $endPoint) |
||||
|
{ |
||||
|
$startDateOjb = new DateTime($startDate); |
||||
|
$endDateOjb = new DateTime($endDate); |
||||
|
$endDateOjb->modify('+1 day'); //DateTime 取两个日期中间日期,不含结束日期 |
||||
|
$period = new DatePeriod($startDateOjb, new DateInterval('P1D'), $endDateOjb); |
||||
|
$interval = $startDateOjb->diff($endDateOjb); |
||||
|
$daysCount = $interval->format('%a'); |
||||
|
$numberArr = $this->autoNumber($startPoint, $endPoint, $daysCount); |
||||
|
$start = 0; |
||||
|
foreach ($period as $k => $date) { |
||||
|
$dates[$date->format("Y-m-d")] = number_format($start += $numberArr[$k], 2, '.', ''); |
||||
|
} |
||||
|
|
||||
|
return json_encode($dates); |
||||
|
} |
||||
|
|
||||
|
private function autoNumber($startPoint, $endPoint, $count) |
||||
|
{ |
||||
|
$rand = round(($endPoint - $startPoint) / $count, 2); |
||||
|
$randomNumbers = array(); |
||||
|
$randomNumbers[] = $startPoint; |
||||
|
for ($i = 0; $i < $count - 2; $i++) { |
||||
|
$temp = bcmul(rand(1, 10) > 4 ? 1 : -1, (rand(1, 10) > 5 ? rand(1, 5) : rand(4, 8)) / 100, 2); |
||||
|
// 生成随机的增减值 |
||||
|
$randomChange = bcmul(rand(1, 10) > 4 ? 1 : -1, rand(1, 10) > 5 ? rand(1, 10) > 3 ? $rand * 2 : $rand * 4 : $rand * 3, 2); |
||||
|
$randomChange = bcadd($randomChange, $temp, 2); |
||||
|
// 将当前值添加到数组中 |
||||
|
$randomNumbers[] = round($randomChange, 2); |
||||
|
} |
||||
|
|
||||
|
$end = round($endPoint - array_sum($randomNumbers), 2); |
||||
|
if (abs($end) > 30) { |
||||
|
return $this->autoNumber($startPoint, $endPoint, $count); |
||||
|
} else { |
||||
|
$randomNumbers[] = $end; |
||||
|
return $randomNumbers; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function interest() |
||||
|
{ |
||||
|
try { |
||||
|
// $interestSwitch = env(); |
||||
|
// if (!$interestSwitch)return; |
||||
|
|
||||
|
$today = date("Y-m-d"); |
||||
|
$interestList = UserStockFundInterestReceiptModel::where("return_date", $today)->where('status', UserStockFundInterestReceiptModel::STATUS_ONE)->select(); |
||||
|
if (count($interestList) == 0) { |
||||
|
trace('fund_interest count=0 基金没有需要处理的返息单-完成', 'error'); |
||||
|
return json(["SUCCESS"]); |
||||
|
} |
||||
|
|
||||
|
foreach ($interestList as $interestV) { |
||||
|
try { |
||||
|
// 单个股票 开始事务 |
||||
|
Db::startTrans(); |
||||
|
$vId = $interestV->id; |
||||
|
//用户基金账户加钱 |
||||
|
$beforeAmount = UserStockFundModel::where('stock_id', 'USD')->where('user_id', $interestV->user_id)->value('usable_num'); |
||||
|
if (empty($beforeAmount)) { |
||||
|
Db::rollback(); |
||||
|
trace("基金返息失败0 返息单ID=$vId", 'error'); |
||||
|
return json(["基金返息失败0"]); |
||||
|
} |
||||
|
|
||||
|
$addNum = bcadd($interestV->capital, $interestV->interest, 18);//本金+利息 |
||||
|
$addBool = UserStockFundModel::where('user_id', $interestV->user_id)->where('stock_id', 'USD')->inc('usable_num', $addNum)->update(['update_time' => date('Y-m-d H:i:s')]); |
||||
|
if (!$addBool) { |
||||
|
Db::rollback(); |
||||
|
trace("基金返息失败1 返息单ID=$vId", 'error'); |
||||
|
return json(["基金返息失败1"]); |
||||
|
} |
||||
|
|
||||
|
// 新增用户基金账户流水 |
||||
|
// 生成流水 |
||||
|
$userStockLog = new UserStockFundLogModel(); |
||||
|
$userStockLog->user_id = $interestV->user_id; |
||||
|
$userStockLog->change_type = 19; |
||||
|
$userStockLog->stock_id = 'USD'; |
||||
|
$userStockLog->before_num = $beforeAmount; |
||||
|
$userStockLog->change_num = $addNum; |
||||
|
$userStockLog->order_id = $interestV->order_no; |
||||
|
$userStockLog->create_time = date('Y-m-d H:i:s'); |
||||
|
$userStockLog->update_time = date('Y-m-d H:i:s'); |
||||
|
$updateNum2 = $userStockLog->save(); |
||||
|
if ($updateNum2 <= 0) { |
||||
|
Db::rollback(); |
||||
|
trace("基金返息失败2 返息单ID=$vId", 'error'); |
||||
|
return json(["基金返息失败2"]); |
||||
|
} |
||||
|
|
||||
|
//修改返息单状态 |
||||
|
$interestReceiptUpdateBool = UserStockFundInterestReceiptModel::where('id', $interestV->id)->update(['status' => UserStockFundInterestReceiptModel::STATUS_TWO, 'update_time' => date('Y-m-d H:i:s')]); |
||||
|
if (!$interestReceiptUpdateBool) { |
||||
|
Db::rollback(); |
||||
|
trace("基金返息失败3 返息单ID=$vId", 'error'); |
||||
|
return json(["基金返息失败3"]); |
||||
|
} |
||||
|
|
||||
|
//修改订单状态 |
||||
|
$order = UserFundPreStockOrderModel::where('id', $interestV->order_id)->find(); |
||||
|
if (empty($order)) { |
||||
|
Db::rollback(); |
||||
|
trace("基金返息失败4 返息单ID=$vId", 'error'); |
||||
|
return json(["基金返息失败4"]); |
||||
|
} |
||||
|
|
||||
|
if ($order->phase_count == $interestV->phase_time) { |
||||
|
$orderStatus = UserFundPreStockOrderModel::STATUS_THREE;//已结束 |
||||
|
} else { |
||||
|
$orderStatus = UserFundPreStockOrderModel::STATUS_TWO;//进行中 |
||||
|
} |
||||
|
$order->status = $orderStatus; |
||||
|
$order->save(); |
||||
|
// 提交事务 |
||||
|
Db::commit(); |
||||
|
} catch (\Exception $exception) { |
||||
|
Db::rollback(); |
||||
|
trace("基金返息息失败5-exception " . $exception->getMessage(), 'error'); |
||||
|
return json(["基金返息失败5-exception"]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
trace('基金返息-完成', 'error'); |
||||
|
return json(["SUCCESS"]); |
||||
|
} catch (\Exception $exception) { |
||||
|
trace("基金返息失败6-exception " . $exception->getMessage(), 'error'); |
||||
|
return json([$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function referStockAdd($param) |
||||
|
{ |
||||
|
try { |
||||
|
$bool = PreFundStockReferModel::insert(['name' => $param['name'], 'year' => $param['year'], 'rate' => $param['rate']]); |
||||
|
if (!$bool) { |
||||
|
return $this->toData('1', '基金状态修改失败-退市'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function referStockDel($param) |
||||
|
{ |
||||
|
try { |
||||
|
$bool = PreFundStockReferModel::where('id', $param['id'])->delete(); |
||||
|
if (!$bool) { |
||||
|
return $this->toData('1', '基金状态修改失败-退市'); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,112 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\ServiceSettingModel; |
||||
|
|
||||
|
class ServiceService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$rows = []; |
||||
|
$list = ServiceSettingModel::order('id', 'desc')->select(); |
||||
|
if (!$list->isEmpty()) { |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows), 'extend' => ['type_list' => ServiceSettingModel::$typeList]]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['type']) || !in_array($param['type'], array_keys(ServiceSettingModel::$typeList))) { |
||||
|
return $this->toData('1', '类型 无效', []); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['header_photo']) || !is_string($param['header_photo'])) { |
||||
|
return $this->toData('1', '头像图片地址无效', []); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['server_name']) || !is_string($param['server_name'])) { |
||||
|
return $this->toData('1', '客服名称无效', []); |
||||
|
} |
||||
|
|
||||
|
if (!empty($param['server_link']) && !is_string($param['server_link'])) { |
||||
|
return $this->toData('1', '类型内容 无效', []); |
||||
|
} |
||||
|
|
||||
|
$service = new ServiceSettingModel; |
||||
|
$service->header_photo = $param['header_photo']; |
||||
|
$service->type = $param['type']; |
||||
|
$service->server_link = $param['server_link'] ?? ''; |
||||
|
$service->server_name = $param['server_name']; |
||||
|
$service->save(); |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
$service = ServiceSettingModel::where('id', $param['id'])->find(); |
||||
|
if (empty($service)) { |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['type']) || !in_array($param['type'], array_keys(ServiceSettingModel::$typeList))) { |
||||
|
return $this->toData('1', '类型 无效', []); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['header_photo']) || !is_string($param['header_photo'])) { |
||||
|
return $this->toData('1', '头像图片地址无效', []); |
||||
|
} |
||||
|
|
||||
|
if (empty($param['server_name']) || !is_string($param['server_name'])) { |
||||
|
return $this->toData('1', '客服名称无效', []); |
||||
|
} |
||||
|
|
||||
|
if (!empty($param['server_link']) && !is_string($param['server_link'])) { |
||||
|
return $this->toData('1', '类型内容 无效', []); |
||||
|
} |
||||
|
$service->type = $param['type']; |
||||
|
$service->header_photo = $param['header_photo']; |
||||
|
$service->server_link = $param['server_link'] ?? ''; |
||||
|
$service->server_name = $param['server_name']; |
||||
|
$service->save(); |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function del($param) |
||||
|
{ |
||||
|
try { |
||||
|
if (empty($param['id']) || !is_numeric($param['id'])) { |
||||
|
return $this->toData('1', '参错错误'); |
||||
|
} |
||||
|
|
||||
|
$lang = ServiceSettingModel::where('id', $param['id'])->find(); |
||||
|
if (empty($lang)) { |
||||
|
return $this->toData('1', '目标不存在'); |
||||
|
} |
||||
|
|
||||
|
$lang->delete(); |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,65 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\model\StockIndexModel; |
||||
|
|
||||
|
class StockIndexService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = StockIndexModel::order('sort', 'desc')->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 update($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '参数错误1', []); |
||||
|
} |
||||
|
|
||||
|
if(!isset($param['sort']) || !is_numeric($param['sort'])){ |
||||
|
return $this->toData('1', '参数错误2', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['status']) || !in_array($param['status'], [1,2])){ |
||||
|
return $this->toData('1', '参数错误3', []); |
||||
|
} |
||||
|
|
||||
|
$stockIndex = StockIndexModel::where('id', $param['id'])->find(); |
||||
|
if(empty($stockIndex)){ |
||||
|
return $this->toData('1', '目标不存在', []); |
||||
|
} |
||||
|
|
||||
|
$stockIndex->sort = ceil($param['sort']); |
||||
|
$stockIndex->status = ceil($param['status']); |
||||
|
$stockIndex->update_time = date('Y-m-d H:i:s'); |
||||
|
$stockIndex->save(); |
||||
|
|
||||
|
// 通知go |
||||
|
$bool = $this->sendStockIndexToGo($stockIndex->code, $stockIndex->country, $stockIndex->sort, $stockIndex->status); |
||||
|
if(!$bool){ |
||||
|
return $this->toData('1', '通知行情失败 请重新设置数据', []); |
||||
|
} |
||||
|
return $this->toData('0', 'SUCCESS'); |
||||
|
|
||||
|
|
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,518 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
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\StockListModel; |
||||
|
use app\model\StockMarketModel; |
||||
|
use app\model\StockMysListModel; |
||||
|
use app\model\StockThaListModel; |
||||
|
|
||||
|
// 股票市场 |
||||
|
class StockMarketService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index() |
||||
|
{ |
||||
|
try { |
||||
|
$list = StockMarketModel::order('stock_market_type', 'asc')->select(); |
||||
|
$rows = []; |
||||
|
if(!$list->isEmpty()){ |
||||
|
$rows = $list->toArray(); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0','SUCCESS', ['total' => count($rows), 'list' => $rows, 'extent' => [ |
||||
|
'stock_market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, |
||||
|
'trade_day_type' => StockMarketModel::TRADE_DAY_TYPE, |
||||
|
]]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 新增 |
||||
|
public function add($param) |
||||
|
{ |
||||
|
try { |
||||
|
$stockMarketTypeArr = StockMarketModel::STOCK_MARKET_TYPE; |
||||
|
$tradeDayTypeArr = StockMarketModel::TRADE_DAY_TYPE; |
||||
|
$stockMarketTypeKeys = array_keys($stockMarketTypeArr); |
||||
|
$tradeDayTypeKeys = array_keys($tradeDayTypeArr); |
||||
|
if(empty($param['stock_market_type']) || !in_array($param['stock_market_type'], $stockMarketTypeKeys)){ |
||||
|
return $this->toData('1', '股票市场类型无效', []); |
||||
|
} |
||||
|
|
||||
|
// 判断是否已经存在 |
||||
|
$stockM = StockMarketModel::where('stock_market_type', $param['stock_market_type'])->find(); |
||||
|
if($stockM){ |
||||
|
return $this->toData('1', '股票市场类型已经存在', []); |
||||
|
} |
||||
|
|
||||
|
$amOpenTime = '00:00'; |
||||
|
$amCloseTime = '00:00'; |
||||
|
$pmOpenTime = '00:00'; |
||||
|
$pmCloseTime = '00:00'; |
||||
|
$num = 0; |
||||
|
if(isset($param['am_open_time']) && is_string($param['am_open_time'])){ |
||||
|
$amOpenTimestamp = strtotime($param['am_open_time']); |
||||
|
if($amOpenTimestamp !== false && date('H:i', $amOpenTimestamp) === $param['am_open_time']){ |
||||
|
$amOpenTime = $param['am_open_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(isset($param['am_close_time']) && is_string($param['am_close_time'])){ |
||||
|
$amCloseTimestamp = strtotime($param['am_close_time']); |
||||
|
if($amCloseTimestamp !== false && date('H:i', $amCloseTimestamp) === $param['am_close_time']){ |
||||
|
$amCloseTime = $param['am_close_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(isset($param['pm_open_time']) && is_string($param['pm_open_time'])){ |
||||
|
$pmOpenTimestamp = strtotime($param['pm_open_time']); |
||||
|
if($pmOpenTimestamp !== false && date('H:i', $pmOpenTimestamp) === $param['pm_open_time']){ |
||||
|
$pmOpenTime = $param['pm_open_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(isset($param['pm_close_time']) && is_string($param['pm_close_time'])){ |
||||
|
$pmCloseTimestamp = strtotime($param['pm_close_time']); |
||||
|
if($pmCloseTimestamp !== false && date('H:i', $pmCloseTimestamp) === $param['pm_close_time']){ |
||||
|
$pmCloseTime = $param['pm_close_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(empty($param['status']) || !in_array($param['status'], [StockMarketModel::STATUS_NO, StockMarketModel::STATUS_OFF])){ |
||||
|
return $this->toData('1', '状态类型无效', []); |
||||
|
} |
||||
|
|
||||
|
// 如果是开启状态 必须设置开盘时间 |
||||
|
if($param['status'] == StockMarketModel::STATUS_NO && $num < 4){ |
||||
|
return $this->toData('1', '需要设置开盘时间', []); |
||||
|
} |
||||
|
|
||||
|
// 货币单位 |
||||
|
if(empty($param['unit']) || !is_string($param['unit']) || strlen($param['unit']) > 10){ |
||||
|
return $this->toData('1', '货币单位无效', []); |
||||
|
} |
||||
|
|
||||
|
// 货币符号 |
||||
|
if(empty($param['symbol']) || !is_string($param['symbol']) || strlen($param['symbol']) > 10){ |
||||
|
return $this->toData('1', '货币符号无效', []); |
||||
|
} |
||||
|
|
||||
|
// 兑换汇率 |
||||
|
if(empty($param['rate']) || !is_numeric($param['rate']) || strlen($param['rate']) > 200){ |
||||
|
return $this->toData('1', '兑换汇率无效', []); |
||||
|
} |
||||
|
|
||||
|
// 如果是开启状态必须设置 交易日限制 如果是关闭状态 |
||||
|
if($param['status'] == StockMarketModel::STATUS_NO){ |
||||
|
if(empty($param['trade_day_type']) || !in_array($param['trade_day_type'], $tradeDayTypeKeys)){ |
||||
|
return $this->toData('1', '交易日限制无效', []); |
||||
|
} |
||||
|
$tradeDayType = $param['trade_day_type']; |
||||
|
}else{ |
||||
|
if(empty($param['trade_day_type']) || !in_array($param['trade_day_type'], $tradeDayTypeKeys)){ |
||||
|
$tradeDayType = 0; |
||||
|
} else{ |
||||
|
$tradeDayType = $param['trade_day_type']; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 设置股票杠杆 |
||||
|
$leverStatus = StockMarketModel::LEVER_STATUS_OFF; |
||||
|
$stockMin = 0; |
||||
|
$leverMin = 1; |
||||
|
$leverMax = 1; |
||||
|
if(!empty($param['lever_status']) && is_numeric($param['lever_status']) && $param['lever_status'] == StockMarketModel::LEVER_STATUS_ON){ |
||||
|
$leverStatus = $param['lever_status']; |
||||
|
if(empty($param['stock_min']) || !is_numeric($param['stock_min']) || $param['stock_min'] <=0){ |
||||
|
return $this->toData('1', '杠杆最小使用股数无效', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['lever_min']) || !is_numeric($param['lever_min']) || $param['lever_min'] <=0){ |
||||
|
return $this->toData('1', '最小杠杆无效', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['lever_max']) || !is_numeric($param['lever_max']) || $param['lever_max'] <=0 || $param['lever_max'] < $param['lever_min']){ |
||||
|
return $this->toData('1', '最大杠杆无效', []); |
||||
|
} |
||||
|
|
||||
|
$stockMin = ceil($param['stock_min']); |
||||
|
$leverMin = ceil($param['lever_min']); |
||||
|
$leverMax = ceil($param['lever_max']); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
$stockMarket = new StockMarketModel; |
||||
|
$stockMarket->stock_market_type = $param['stock_market_type']; |
||||
|
$stockMarket->status = $param['status']; |
||||
|
$stockMarket->symbol = $param['symbol']; |
||||
|
$stockMarket->unit = $param['unit']; |
||||
|
$stockMarket->rate = $param['rate']; |
||||
|
// 开盘时间 |
||||
|
$stockMarket->am_open_time = $amOpenTime; |
||||
|
$stockMarket->am_close_time = $amCloseTime; |
||||
|
$stockMarket->pm_open_time = $pmOpenTime; |
||||
|
$stockMarket->pm_close_time = $pmCloseTime; |
||||
|
$stockMarket->trade_day_type = $tradeDayType; |
||||
|
$stockMarket->create_time = date('Y-m-d H:i:s'); |
||||
|
$stockMarket->update_time = date('Y-m-d H:i:s'); |
||||
|
|
||||
|
$stockMarket->stock_min = $stockMin; |
||||
|
$stockMarket->lever_min = $leverMin; |
||||
|
$stockMarket->lever_max = $leverMax; |
||||
|
$stockMarket->lever_status = $leverStatus; |
||||
|
|
||||
|
$stockMarket->save(); |
||||
|
|
||||
|
// 缓存 |
||||
|
$list_key="STOCK_MARKET:LIST:" .$stockMarket->stock_market_type; |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($list_key); |
||||
|
$redis->hMset($list_key, [ |
||||
|
'id'=>$stockMarket->id, |
||||
|
'stock_market_type'=>$stockMarket->stock_market_type, |
||||
|
'trade_day_type'=>$stockMarket->trade_day_type, |
||||
|
'unit'=>$stockMarket->unit, |
||||
|
'rate'=>$stockMarket->rate, |
||||
|
'symbol'=>$stockMarket->symbol, |
||||
|
'status'=>$stockMarket->status, |
||||
|
'am_open_time'=>$stockMarket->am_open_time, |
||||
|
'am_close_time'=>$stockMarket->am_close_time, |
||||
|
'pm_open_time'=>$stockMarket->pm_open_time, |
||||
|
'pm_close_time'=>$stockMarket->pm_close_time, |
||||
|
|
||||
|
'lever_status' => $leverStatus, |
||||
|
'stock_min' => $stockMin, |
||||
|
'lever_min' => $leverMin, |
||||
|
'lever_max' => $leverMax, |
||||
|
|
||||
|
]); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS'); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage(),$exception->getLine()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
try { |
||||
|
if(empty($param['id']) || !is_numeric($param['id'])){ |
||||
|
return $this->toData('1', '主键无效', []); |
||||
|
} |
||||
|
|
||||
|
$stockMarket = StockMarketModel::where('id', $param['id'])->find(); |
||||
|
if(empty($stockMarket)){ |
||||
|
return $this->toData('1', '主键无效', []); |
||||
|
} |
||||
|
|
||||
|
$tradeDayTypeArr = StockMarketModel::TRADE_DAY_TYPE; |
||||
|
$tradeDayTypeKeys = array_keys($tradeDayTypeArr); |
||||
|
|
||||
|
|
||||
|
// 状态 |
||||
|
if(empty($param['status']) || !in_array($param['status'], [StockMarketModel::STATUS_NO, StockMarketModel::STATUS_OFF])){ |
||||
|
return $this->toData('1', '状态类型无效', []); |
||||
|
} |
||||
|
|
||||
|
$amOpenTime = '00:00'; |
||||
|
$amCloseTime = '00:00'; |
||||
|
$pmOpenTime = '00:00'; |
||||
|
$pmCloseTime = '00:00'; |
||||
|
$num = 0; |
||||
|
if(isset($param['am_open_time']) && is_string($param['am_open_time'])){ |
||||
|
$amOpenTimestamp = strtotime($param['am_open_time']); |
||||
|
if($amOpenTimestamp !== false && date('H:i', $amOpenTimestamp) === $param['am_open_time']){ |
||||
|
$amOpenTime = $param['am_open_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(isset($param['am_close_time']) && is_string($param['am_close_time'])){ |
||||
|
$amCloseTimestamp = strtotime($param['am_close_time']); |
||||
|
if($amCloseTimestamp !== false && date('H:i', $amCloseTimestamp) === $param['am_close_time']){ |
||||
|
$amCloseTime = $param['am_close_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(isset($param['pm_open_time']) && is_string($param['pm_open_time'])){ |
||||
|
$pmOpenTimestamp = strtotime($param['pm_open_time']); |
||||
|
if($pmOpenTimestamp !== false && date('H:i', $pmOpenTimestamp) === $param['pm_open_time']){ |
||||
|
$pmOpenTime = $param['pm_open_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(isset($param['pm_close_time']) && is_string($param['pm_close_time'])){ |
||||
|
$pmCloseTimestamp = strtotime($param['pm_close_time']); |
||||
|
if($pmCloseTimestamp !== false && date('H:i', $pmCloseTimestamp) === $param['pm_close_time']){ |
||||
|
$pmCloseTime = $param['pm_close_time']; |
||||
|
$num++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 如果是开启状态 必须设置开盘时间 |
||||
|
if($param['status'] == StockMarketModel::STATUS_NO && $num < 4){ |
||||
|
return $this->toData('1', '需要设置开盘时间', []); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 货币单位 |
||||
|
if(empty($param['unit']) || !is_string($param['unit']) || strlen($param['unit']) > 10){ |
||||
|
return $this->toData('1', '货币单位无效', []); |
||||
|
} |
||||
|
|
||||
|
// 货币符号 |
||||
|
if(empty($param['symbol']) || !is_string($param['symbol']) || strlen($param['symbol']) > 10){ |
||||
|
return $this->toData('1', '货币符号无效', []); |
||||
|
} |
||||
|
|
||||
|
// 兑换汇率 |
||||
|
if(empty($param['rate']) || !is_numeric($param['rate']) || strlen($param['rate']) > 200){ |
||||
|
return $this->toData('1', '兑换汇率无效', []); |
||||
|
} |
||||
|
|
||||
|
$tradeDayType = $stockMarket->trade_day_type; |
||||
|
|
||||
|
// 只有在没有设置过的情况下可以设置 设置之后不能修改 |
||||
|
if($tradeDayType == 0){ |
||||
|
if($param['status'] == StockMarketModel::STATUS_NO){ |
||||
|
// 如果是开启状态 必须设置 |
||||
|
if(empty($param['trade_day_type']) || !in_array($param['trade_day_type'], $tradeDayTypeKeys)){ |
||||
|
return $this->toData('1', '交易日限制无效', []); |
||||
|
} |
||||
|
$tradeDayType = $param['trade_day_type']; |
||||
|
}else{ |
||||
|
// 关闭状态 可以不设置 |
||||
|
if(!empty($param['trade_day_type']) && in_array($param['trade_day_type'], $tradeDayTypeKeys)){ |
||||
|
$tradeDayType = $param['trade_day_type']; |
||||
|
} else{ |
||||
|
$tradeDayType = 0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 设置股票杠杆 |
||||
|
$leverStatus = StockMarketModel::LEVER_STATUS_OFF; |
||||
|
$stockMin = 0; |
||||
|
$leverMin = 1; |
||||
|
$leverMax = 1; |
||||
|
if(!empty($param['lever_status']) && is_numeric($param['lever_status']) && $param['lever_status'] == StockMarketModel::LEVER_STATUS_ON){ |
||||
|
$leverStatus = $param['lever_status']; |
||||
|
if(empty($param['stock_min']) || !is_numeric($param['stock_min']) || $param['stock_min'] <=0){ |
||||
|
return $this->toData('1', '杠杆最小使用股数无效', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['lever_min']) || !is_numeric($param['lever_min']) || $param['lever_min'] <=0){ |
||||
|
return $this->toData('1', '最小杠杆无效', []); |
||||
|
} |
||||
|
|
||||
|
if(empty($param['lever_max']) || !is_numeric($param['lever_max']) || $param['lever_max'] <=0 || $param['lever_max'] < $param['lever_min']){ |
||||
|
return $this->toData('1', '最大杠杆无效', []); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
$stockMin = ceil($param['stock_min']); |
||||
|
$leverMin = ceil($param['lever_min']); |
||||
|
$leverMax = ceil($param['lever_max']); |
||||
|
|
||||
|
|
||||
|
$stockMarket->status = $param['status']; |
||||
|
$stockMarket->trade_day_type = $tradeDayType; |
||||
|
$stockMarket->symbol = $param['symbol']; |
||||
|
$stockMarket->unit = $param['unit']; |
||||
|
$stockMarket->rate = $param['rate']; |
||||
|
$stockMarket->am_open_time = $amOpenTime; |
||||
|
$stockMarket->am_close_time = $amCloseTime; |
||||
|
$stockMarket->pm_open_time = $pmOpenTime; |
||||
|
$stockMarket->pm_close_time = $pmCloseTime; |
||||
|
$stockMarket->trade_day_type = $tradeDayType; |
||||
|
$stockMarket->update_time = date('Y-m-d H:i:s'); |
||||
|
|
||||
|
$stockMarket->stock_min = $stockMin; |
||||
|
$stockMarket->lever_min = $leverMin; |
||||
|
$stockMarket->lever_max = $leverMax; |
||||
|
$stockMarket->lever_status = $leverStatus; |
||||
|
|
||||
|
$stockMarket->save(); |
||||
|
|
||||
|
// 缓存 |
||||
|
$list_key="STOCK_MARKET:LIST:" .$stockMarket->stock_market_type; |
||||
|
$redis = $this->getRedis(); |
||||
|
$redis->del($list_key); |
||||
|
$redis->hMset($list_key, [ |
||||
|
'id'=>$stockMarket->id, |
||||
|
'stock_market_type'=>$stockMarket->stock_market_type, |
||||
|
'trade_day_type'=>$stockMarket->trade_day_type, |
||||
|
'status'=>$stockMarket->status, |
||||
|
'symbol'=>$stockMarket->symbol, |
||||
|
'unit'=>$stockMarket->unit, |
||||
|
'rate'=>$stockMarket->rate, |
||||
|
'am_open_time'=>$stockMarket->am_open_time, |
||||
|
'am_close_time'=>$stockMarket->am_close_time, |
||||
|
'pm_open_time'=>$stockMarket->pm_open_time, |
||||
|
'pm_close_time'=>$stockMarket->pm_close_time, |
||||
|
|
||||
|
'lever_status' => $leverStatus, |
||||
|
'stock_min' => $stockMin, |
||||
|
'lever_min' => $leverMin, |
||||
|
'lever_max' => $leverMax, |
||||
|
]); |
||||
|
$arr=$redis->hGetAll($list_key); |
||||
|
|
||||
|
return $this->toData('0','SUCCESS',$arr); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 股票筛选 根据股票号 股票市场 模糊搜索股票数据 |
||||
|
public function searchStock($param) |
||||
|
{ |
||||
|
try { |
||||
|
$marketTypeList = StockMarketModel::STOCK_MARKET_TYPE; |
||||
|
if(empty($param['market_type']) || !in_array($param['market_type'], array_keys($marketTypeList))){ |
||||
|
return $this->toData('1', '股票市场无效', []); |
||||
|
} |
||||
|
|
||||
|
$where = []; |
||||
|
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', '分页参数无效', []); |
||||
|
} |
||||
|
|
||||
|
if(!empty($param['stock_code']) && is_string($param['stock_code'])){ |
||||
|
$where[] = ['stock_code', 'like', '%'.$param['stock_code']]; |
||||
|
} |
||||
|
|
||||
|
switch ($param['market_type']) |
||||
|
{ |
||||
|
// 美股 |
||||
|
case StockMarketModel::STOCK_MARKET_USA: |
||||
|
$stockList = StockListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_YNG: |
||||
|
$stockList = StockIdnListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockIdnListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_MG: |
||||
|
$stockList = StockMysListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockMysListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_TG: |
||||
|
$stockList = StockThaListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockThaListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_IN: |
||||
|
$stockList = StockInListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockInListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_HK: |
||||
|
$stockList = StockHkdListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockHkdListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_UK: |
||||
|
$stockList = StockGBXListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockGBXListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_FUR: |
||||
|
$stockList = StockFurListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockFurListModel::where($where)->count(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_EUR: |
||||
|
$stockList = StockEurListModel::where($where)->page($param['page'], $param['limit'])->select(); |
||||
|
$total = StockEurListModel::where($where)->count(); |
||||
|
break; |
||||
|
default: |
||||
|
return $this->toData('1', '股票市场无效', []); |
||||
|
} |
||||
|
|
||||
|
$rows = []; |
||||
|
if(!$stockList->isEmpty()){ |
||||
|
$rows = $stockList->toArray(); |
||||
|
} |
||||
|
|
||||
|
return $this->toData('0','SUCCESS', ['total' => $total, 'list' => $rows, 'extent' => [ |
||||
|
'stock_market_type_list' => StockMarketModel::STOCK_MARKET_TYPE, |
||||
|
'trade_day_type' => StockMarketModel::TRADE_DAY_TYPE, |
||||
|
]]); |
||||
|
}catch (\Exception $exception){ |
||||
|
return $this->toData('1', '系统繁忙', [$exception->getMessage()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 根据股票市场 股票主键 查询股票 |
||||
|
public function searchStockById($param) |
||||
|
{ |
||||
|
$marketTypeList = StockMarketModel::STOCK_MARKET_TYPE; |
||||
|
if(empty($param['market_type']) || !in_array($param['market_type'], array_keys($marketTypeList))){ |
||||
|
return []; |
||||
|
} |
||||
|
|
||||
|
if(empty($param['stock_id']) || !is_numeric($param['stock_id'])){ |
||||
|
return []; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
switch ($param['market_type']) |
||||
|
{ |
||||
|
// 美股 |
||||
|
case StockMarketModel::STOCK_MARKET_USA: |
||||
|
$stock = StockListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_YNG: |
||||
|
$stock = StockIdnListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_MG: |
||||
|
$stock = StockMysListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_TG: |
||||
|
$stock = StockThaListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_IN: |
||||
|
$stock = StockInListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_HK: |
||||
|
$stock = StockHkdListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_UK: |
||||
|
$stock = StockGBXListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_FUR: |
||||
|
$stock = StockFurListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
case StockMarketModel::STOCK_MARKET_EUR: |
||||
|
$stock = StockEurListModel::where('id', $param['stock_id'])->find(); |
||||
|
break; |
||||
|
default: |
||||
|
return []; |
||||
|
} |
||||
|
|
||||
|
if(empty($stock)){ |
||||
|
return []; |
||||
|
} |
||||
|
return $stock->toArray(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,227 @@ |
|||||
|
<?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()]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\service\setting; |
||||
|
|
||||
|
use app\admin\service\AdminBaseService; |
||||
|
use app\admin\validate\setting\StockValidate; |
||||
|
use app\model\StockListModel; |
||||
|
use app\model\StockMarketModel; |
||||
|
use app\model\StockPricesSettingModel; |
||||
|
use PHPMailer\PHPMailer\Exception; |
||||
|
use think\exception\ValidateException; |
||||
|
use think\facade\Validate; |
||||
|
|
||||
|
class StockService extends AdminBaseService |
||||
|
{ |
||||
|
|
||||
|
public function index($param) |
||||
|
{ |
||||
|
return (new IPOService())->stockList(3,$param); |
||||
|
} |
||||
|
|
||||
|
public function add($param) |
||||
|
{ |
||||
|
return (new IPOService())->addStock(3,$param); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function edit($param) |
||||
|
{ |
||||
|
return (new IPOService())->editStock(3,$param); |
||||
|
} |
||||
|
|
||||
|
// 美股列表 |
||||
|
public function getTradeNameList($param) |
||||
|
{ |
||||
|
try { |
||||
|
$list = StockListModel::where('status', 1)->order('id', 'desc')->column('stock_name', 'id'); |
||||
|
return $this->toData('0', 'SUCCESS', ['list' => $list]); |
||||
|
} catch (\Exception $exception) { |
||||
|
return $this->toData('1', '系统繁忙', []); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,93 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\validate; |
||||
|
|
||||
|
use think\Validate; |
||||
|
|
||||
|
class AdminBaseValidate extends Validate |
||||
|
{ |
||||
|
|
||||
|
// 校验是否是 整数 包含字符串 大于0 |
||||
|
public function checkNumberIntBg($value, $rule, $data=[]) |
||||
|
{ |
||||
|
if(!is_numeric($value)){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if(ceil($value) != $value){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if($value <= 0){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
// 校验是否是 整数 包含字符串 大于0 |
||||
|
public function checkNumberIntAt($value, $rule, $data=[]) |
||||
|
{ |
||||
|
if(!is_numeric($value)){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if(ceil($value) != $value){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if($value < 0){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 校验是否是 数字 包含 小数 字符串 大于 0 |
||||
|
public function checkNumberFloatBg($value, $rule, $data=[]) |
||||
|
{ |
||||
|
if(!is_numeric($value)){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if($value <= 0){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
// 必传 包含0的情况 |
||||
|
public function checkStatusRequire($value, $rule, $data=[]) |
||||
|
{ |
||||
|
if(!isset($data['status'])){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if(!is_numeric($value)){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
// 是否是字符串 |
||||
|
public function checkIsString($value, $rule, $data=[]) |
||||
|
{ |
||||
|
return is_string($value); |
||||
|
} |
||||
|
public function checkInRequire($value, $rule, $data=[]) |
||||
|
{ |
||||
|
if(!isset($data['channel_type'])){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
if(!in_array($value,$rule)){ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
return true; |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,40 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\validate; |
||||
|
|
||||
|
class AdminValidate extends AdminBaseValidate |
||||
|
{ |
||||
|
|
||||
|
protected $rule = [ |
||||
|
'user_name' => 'require|alphaNum', |
||||
|
'password' => 'require|length:5,40', |
||||
|
'new_password' => 'require|length:5,40', |
||||
|
'old_password' => 'require|length:5,40', |
||||
|
'nick_name' => 'require|alphaNum', |
||||
|
|
||||
|
]; |
||||
|
|
||||
|
protected $message = [ |
||||
|
'user_name.alphaNum' => '用户名必须包含字母和数字', |
||||
|
'nick_name.alphaNum' => '昵称必须包含字母和数字', |
||||
|
'password.require' => '请填写密码', |
||||
|
// 'password.isString' => '密码格式不正确.', |
||||
|
'password.length' => '密码必须大于5个字符.', |
||||
|
'new_password.require' => '请填写新密码', |
||||
|
// 'password.isString' => '密码格式不正确.', |
||||
|
'new_password.length' => '密码必须大于5个字符.', |
||||
|
'old_password.require' => '请填写原始密码', |
||||
|
// 'password.isString' => '密码格式不正确.', |
||||
|
'old_password.length' => '密码必须大于5个字符.', |
||||
|
|
||||
|
]; |
||||
|
|
||||
|
|
||||
|
protected $scene = [ |
||||
|
'addUser' => ['user_name','password','nick_name'], |
||||
|
'updateInfo' => ['nick_name','email'], |
||||
|
'updateAccount' => ['user_name','nick_name'], |
||||
|
'updatePassword'=>['new_password','old_password'], |
||||
|
'updateAccountStatus'=>['id','status'] |
||||
|
]; |
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\validate; |
||||
|
|
||||
|
class FlowValidate extends AdminBaseValidate |
||||
|
{ |
||||
|
protected $rule = [ |
||||
|
'page' => 'require|integer', |
||||
|
'limit' => 'require|integer', |
||||
|
'order_id' => 'alphaNum', |
||||
|
'user_no' => 'alphaNum', |
||||
|
'chang_type' => 'in:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20', |
||||
|
'digital_id' => 'upper', |
||||
|
'contract_id' => 'alphaDash', |
||||
|
'stock_id' => 'alphaDash', |
||||
|
'start_time' => 'date|dateFormat:Y-m-d H:i:s', |
||||
|
'end_time' => 'date|dateFormat:Y-m-d H:i:s', |
||||
|
'from_account' => 'in:1,2,3', |
||||
|
'to_account' => 'in:1,2,3', |
||||
|
'account_type' => 'in:1,2,3', |
||||
|
'trade_type' => 'in:1,2', |
||||
|
'trade_no' => 'alphaNum', |
||||
|
'level_type' => 'in:1,2,3', |
||||
|
'back_type' => 'in:0,1,2,3', |
||||
|
]; |
||||
|
|
||||
|
protected $message = [ |
||||
|
'page.require' => '分页参数无效', |
||||
|
'page.integer' => '分页参数无效', |
||||
|
'limit.require' => '分页参数无效', |
||||
|
'limit.integer' => '分页参数无效', |
||||
|
'chang_type.in' => '变动类型无效', |
||||
|
'order_id.alphaNum' => '订单号无效', |
||||
|
'user_no.alphaNum' => '用户号无效', |
||||
|
'digital_id.upper' => '交易对无效', |
||||
|
'contract_id.upper' => '合约代码无效', |
||||
|
'stock_id.upper' => '股票代码无效', |
||||
|
'start_time.date' => '搜索日期无效', |
||||
|
'start_time.dateFormat' => '搜索日期无效', |
||||
|
'end_time.date' => '搜索日期无效', |
||||
|
'end_time.dateFormat' => '搜索日期无效', |
||||
|
'from_account.in' => '转出资金账号无效', |
||||
|
'to_account.in' => '转入资金账号无效', |
||||
|
'account_type.in' => '账户类型无效', |
||||
|
'trade_type.in' => '交易类型无效', |
||||
|
'trade_no.in' => '交易单号无效', |
||||
|
'level_type.in' => '返佣级别无效', |
||||
|
'back_type.in' => '返佣类型无效', |
||||
|
]; |
||||
|
|
||||
|
protected $scene = [ |
||||
|
'digital' => ['page','limit', 'user_no', 'digital_id', 'chang_type','start_time', 'end_time'], |
||||
|
'stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
'contract' => ['page','limit', 'user_no', 'contract_id', 'chang_type','start_time', 'end_time'], |
||||
|
'forex' => ['page','limit', 'user_no', 'contract_id', 'chang_type','start_time', 'end_time'], |
||||
|
'transfer' => ['page','limit', 'user_no', 'from_account', 'to_account','start_time', 'end_time'], |
||||
|
'fee' => ['page','limit', 'user_no', 'account_type', 'trade_type','trade_no','start_time', 'end_time'], |
||||
|
'brokerage' => ['page','limit', 'user_no', 'level_type', 'back_type','start_time', 'end_time'], |
||||
|
|
||||
|
// 美股资产流水 |
||||
|
'us_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
// 印尼股票 |
||||
|
'idn_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
// 马来西亚资产流水 |
||||
|
'mys_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
// 泰国股票 |
||||
|
'tha_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
// 印度股票 |
||||
|
'in_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
'sgd_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
'hk_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
|
||||
|
'fund_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
'block_stock' => ['page','limit', 'user_no', 'stock_id', 'chang_type','start_time', 'end_time'], |
||||
|
|
||||
|
]; |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\admin\validate; |
||||
|
|
||||
|
class LoginValidate extends AdminBaseValidate |
||||
|
{ |
||||
|
protected $rule = [ |
||||
|
'user_name' => 'require|alphaNum', |
||||
|
'password' => 'require|length:5,40', |
||||
|
]; |
||||
|
protected $message = [ |
||||
|
'user_name.require' => '请填写用户名', |
||||
|
'user_name.alphaNum' => '用户名必须包含字母和数字', |
||||
|
'password.require' => '请填写密码', |
||||
|
'password.length' => '密码必须大于5个字符.', |
||||
|
]; |
||||
|
protected $scene = [ |
||||
|
'login' => ['user_name','password'], |
||||
|
]; |
||||
|
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue