mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2025-04-05 19:41:44 +08:00
ComposerUpdate
This commit is contained in:
parent
d6c83c4c5b
commit
0cb2795545
@ -44,11 +44,11 @@
|
||||
<span class="color-desc">任务指令:{$vo.command|default=''}</span>
|
||||
</td>
|
||||
<td class='text-left nowrap'>
|
||||
创建时间:{$vo.create_at|format_datetime} / {$vo.time|format_datetime}<br>
|
||||
执行时间:{$vo.start_at|format_datetime} / {$vo.end_at|format_datetime}
|
||||
创建时间:{$vo.create_at|format_datetime} / {$vo.exec_time|format_datetime}<br>
|
||||
执行时间:{$vo.enter_time|format_datetime} / {$vo.outer_time|format_datetime}
|
||||
</td>
|
||||
<td class='text-left nowrap'>
|
||||
任务状态:{eq name='vo.double' value='1'}
|
||||
任务状态:{eq name='vo.rscript' value='1'}
|
||||
<span class="layui-badge layui-bg-green margin-right-5">复</span>
|
||||
{else}
|
||||
<span class="layui-badge layui-bg-blue margin-right-5">单</span>
|
||||
@ -72,7 +72,7 @@
|
||||
</a>
|
||||
{/if}
|
||||
<br>
|
||||
状态描述:<span class="color-desc">{$vo.desc|raw|default="没有获取到状态描述"}</span>
|
||||
状态描述:<span class="color-desc">{$vo.exec_desc|raw|default="没有获取到状态描述"}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
|
8
composer.lock
generated
8
composer.lock
generated
@ -783,12 +783,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zoujingli/ThinkLibrary.git",
|
||||
"reference": "3f65028edaf407d87b5267f81de1fb46c884fed6"
|
||||
"reference": "db1bc2c31e0850dc2b3dfa622757bc69bc19adb3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/3f65028edaf407d87b5267f81de1fb46c884fed6",
|
||||
"reference": "3f65028edaf407d87b5267f81de1fb46c884fed6",
|
||||
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/db1bc2c31e0850dc2b3dfa622757bc69bc19adb3",
|
||||
"reference": "db1bc2c31e0850dc2b3dfa622757bc69bc19adb3",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -832,7 +832,7 @@
|
||||
],
|
||||
"description": "ThinkPHP v6.0 Development Library",
|
||||
"homepage": "http://framework.thinkadmin.top",
|
||||
"time": "2019-11-11T02:25:45+00:00"
|
||||
"time": "2019-11-12T02:49:58+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -4,4 +4,4 @@
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInited8677b0740ec5eab6dc73e204cbc7f9::getLoader();
|
||||
return ComposerAutoloaderInitd0e0e12040e0346563a00e9de898c5b7::getLoader();
|
||||
|
14
vendor/composer/autoload_real.php
vendored
14
vendor/composer/autoload_real.php
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInited8677b0740ec5eab6dc73e204cbc7f9
|
||||
class ComposerAutoloaderInitd0e0e12040e0346563a00e9de898c5b7
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@ -19,15 +19,15 @@ class ComposerAutoloaderInited8677b0740ec5eab6dc73e204cbc7f9
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInited8677b0740ec5eab6dc73e204cbc7f9', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInitd0e0e12040e0346563a00e9de898c5b7', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInited8677b0740ec5eab6dc73e204cbc7f9', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitd0e0e12040e0346563a00e9de898c5b7', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require_once __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitd0e0e12040e0346563a00e9de898c5b7::getInitializer($loader));
|
||||
} else {
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
@ -48,19 +48,19 @@ class ComposerAutoloaderInited8677b0740ec5eab6dc73e204cbc7f9
|
||||
$loader->register(true);
|
||||
|
||||
if ($useStaticLoader) {
|
||||
$includeFiles = Composer\Autoload\ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9::$files;
|
||||
$includeFiles = Composer\Autoload\ComposerStaticInitd0e0e12040e0346563a00e9de898c5b7::$files;
|
||||
} else {
|
||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||
}
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequireed8677b0740ec5eab6dc73e204cbc7f9($fileIdentifier, $file);
|
||||
composerRequired0e0e12040e0346563a00e9de898c5b7($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
||||
function composerRequireed8677b0740ec5eab6dc73e204cbc7f9($fileIdentifier, $file)
|
||||
function composerRequired0e0e12040e0346563a00e9de898c5b7($fileIdentifier, $file)
|
||||
{
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
require $file;
|
||||
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
@ -4,7 +4,7 @@
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9
|
||||
class ComposerStaticInitd0e0e12040e0346563a00e9de898c5b7
|
||||
{
|
||||
public static $files = array (
|
||||
'9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
|
||||
@ -470,9 +470,9 @@ class ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInited8677b0740ec5eab6dc73e204cbc7f9::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitd0e0e12040e0346563a00e9de898c5b7::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitd0e0e12040e0346563a00e9de898c5b7::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitd0e0e12040e0346563a00e9de898c5b7::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
8
vendor/composer/installed.json
vendored
8
vendor/composer/installed.json
vendored
@ -805,12 +805,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zoujingli/ThinkLibrary.git",
|
||||
"reference": "3f65028edaf407d87b5267f81de1fb46c884fed6"
|
||||
"reference": "db1bc2c31e0850dc2b3dfa622757bc69bc19adb3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/3f65028edaf407d87b5267f81de1fb46c884fed6",
|
||||
"reference": "3f65028edaf407d87b5267f81de1fb46c884fed6",
|
||||
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/db1bc2c31e0850dc2b3dfa622757bc69bc19adb3",
|
||||
"reference": "db1bc2c31e0850dc2b3dfa622757bc69bc19adb3",
|
||||
"shasum": "",
|
||||
"mirrors": [
|
||||
{
|
||||
@ -826,7 +826,7 @@
|
||||
"ext-json": "*",
|
||||
"topthink/framework": "^6.0"
|
||||
},
|
||||
"time": "2019-11-11T02:25:45+00:00",
|
||||
"time": "2019-11-12T02:49:58+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"think": {
|
||||
|
2
vendor/services.php
vendored
2
vendor/services.php
vendored
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// This file is automatically generated at:2019-11-11 14:03:51
|
||||
// This file is automatically generated at:2019-11-12 10:52:35
|
||||
declare (strict_types = 1);
|
||||
return array (
|
||||
0 => 'think\\app\\Service',
|
||||
|
25
vendor/zoujingli/think-library/src/Queue.php
vendored
25
vendor/zoujingli/think-library/src/Queue.php
vendored
@ -17,8 +17,6 @@ namespace think\admin;
|
||||
|
||||
use think\admin\service\ProcessService;
|
||||
use think\App;
|
||||
use think\console\Input;
|
||||
use think\console\Output;
|
||||
|
||||
/**
|
||||
* 基础任务基类
|
||||
@ -31,25 +29,31 @@ class Queue
|
||||
* 应用实例
|
||||
* @var App
|
||||
*/
|
||||
public $app;
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* 当前任务ID
|
||||
* @var integer
|
||||
*/
|
||||
public $jobid = 0;
|
||||
protected $jobid = 0;
|
||||
|
||||
/**
|
||||
* 当前任务标题
|
||||
* @var string
|
||||
*/
|
||||
public $title = '';
|
||||
protected $title = '';
|
||||
|
||||
/**
|
||||
* 当前任务内容
|
||||
* 当前任务参数
|
||||
* @var array
|
||||
*/
|
||||
public $queue = [];
|
||||
protected $data = [];
|
||||
|
||||
/**
|
||||
* 当前任务数据
|
||||
* @var array
|
||||
*/
|
||||
protected $queue = [];
|
||||
|
||||
/**
|
||||
* Queue constructor.
|
||||
@ -96,6 +100,7 @@ class Queue
|
||||
$this->queue = $this->app->db->name('SystemQueue')->where(['id' => $this->jobid])->find();
|
||||
if (empty($this->queue)) throw new \think\Exception("Queue {$jobid} Not found.");
|
||||
$this->title = $this->queue['title'];
|
||||
$this->data = json_decode($this->queue['exec_data'], true) ?: [];
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
@ -142,7 +147,7 @@ class Queue
|
||||
*/
|
||||
public function register($title, $command, $later = 0, $data = [], $rscript = 1)
|
||||
{
|
||||
$map = [['title', 'eq', $title], ['status', 'in', ['1', '2']]];
|
||||
$map = [['title', '=', $title], ['status', 'in', ['1', '2']]];
|
||||
if (empty($rscript) && $this->app->db->name('SystemQueue')->where($map)->count() > 0) {
|
||||
throw new \think\Exception('该任务已经创建,请耐心等待处理完成!');
|
||||
}
|
||||
@ -161,12 +166,10 @@ class Queue
|
||||
|
||||
/**
|
||||
* 执行任务处理
|
||||
* @param Input $input 输入对象
|
||||
* @param Output $output 输出对象
|
||||
* @param array $data 任务参数
|
||||
* @return mixed
|
||||
*/
|
||||
public function execute(Input $input, Output $output, array $data = [])
|
||||
public function execute(array $data = [])
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -26,11 +26,6 @@ use think\exception\HttpResponseException;
|
||||
*/
|
||||
class TokenHelper extends Helper
|
||||
{
|
||||
/**
|
||||
* 获取当前令牌值
|
||||
* @var string
|
||||
*/
|
||||
protected $token;
|
||||
|
||||
/**
|
||||
* 初始化验证码器
|
||||
@ -40,8 +35,7 @@ class TokenHelper extends Helper
|
||||
public function init($return = false)
|
||||
{
|
||||
$this->class->csrf_state = true;
|
||||
$this->token = $this->app->request->header('user-form-token', input('_csrf_', ''));
|
||||
if ($this->app->request->isPost() && !TokenService::instance($this->app)->checkFormToken($this->token)) {
|
||||
if ($this->app->request->isPost() && !TokenService::instance($this->app)->checkFormToken()) {
|
||||
if ($return) return false;
|
||||
$this->class->error($this->class->csrf_message);
|
||||
} else {
|
||||
@ -54,8 +48,7 @@ class TokenHelper extends Helper
|
||||
*/
|
||||
public function clear()
|
||||
{
|
||||
$this->token = $this->app->request->header('user-form-token', input('_csrf_', ''));
|
||||
if (!empty($this->token)) TokenService::instance($this->app)->clearFormToken($this->token);
|
||||
TokenService::instance($this->app)->clearFormToken();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,14 +55,14 @@ class ListenQueue extends Command
|
||||
try {
|
||||
$this->app->db->name('SystemQueue')->where(['id' => $vo['id']])->update(['status' => '2', 'enter_time' => time(), 'attempts' => $vo['attempts'] + 1]);
|
||||
if ($process->query($command = $process->think("xtask:_work {$vo['id']} -"))) {
|
||||
$output->comment("任务正在执行 --> [{$vo['id']}] {$vo['title']}");
|
||||
$output->comment("正在执行 --> [{$vo['id']}] {$vo['title']}");
|
||||
} else {
|
||||
$process->create($command);
|
||||
$output->info("任务创建成功 --> [{$vo['id']}] {$vo['title']}");
|
||||
$output->info("创建成功 --> [{$vo['id']}] {$vo['title']}");
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->app->db->name('SystemQueue')->where(['id' => $vo['id']])->update(['status' => '4', 'outer_time' => time(), 'exec_desc' => $e->getMessage()]);
|
||||
$output->error("任务创建失败 --> [{$vo['id']}] {$vo['title']},{$e->getMessage()}");
|
||||
$output->error("创建失败 --> [{$vo['id']}] {$vo['title']},{$e->getMessage()}");
|
||||
}
|
||||
}
|
||||
sleep(1);
|
||||
|
@ -56,7 +56,7 @@ class WorkQueue extends Command
|
||||
* 任务执行
|
||||
* @param Input $input
|
||||
* @param Output $output
|
||||
* @throws \Exception
|
||||
* @throws \think\db\exception\DbException
|
||||
*/
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
@ -73,12 +73,13 @@ class WorkQueue extends Command
|
||||
if (class_exists($command = $queue['command'])) {
|
||||
if ($command instanceof Queue) {
|
||||
$data = json_decode($queue['data'], true) ?: [];
|
||||
$this->update('3', $command::instance($this->app, $this->id)->execute($input, $output, $data));
|
||||
$this->update('3', $command::instance($this->app, $this->id)->execute($data));
|
||||
} else {
|
||||
throw new \think\Exception("任务处理类 {$command} 未继承 think\\admin\\Queue");
|
||||
}
|
||||
} else {
|
||||
$this->update('3', $this->app->console->call($queue['command'], [], 'console'));
|
||||
$attr = explode(' ', trim(preg_replace('|\s+|', ' ', $queue['command'])));
|
||||
$this->update('3', $this->app->console->call(array_shift($attr), $attr, 'console'));
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$this->update('4', $e->getMessage());
|
||||
@ -94,8 +95,9 @@ class WorkQueue extends Command
|
||||
*/
|
||||
protected function update($status, $message)
|
||||
{
|
||||
$desc = explode("\n", trim(is_string($message) ? $message : ''));
|
||||
$result = $this->app->db->name('SystemQueue')->where(['id' => $this->id])->update([
|
||||
'status' => $status, 'outer_time' => date('Y-m-d H:i:s'), 'exec_desc' => is_string($message) ? $message : '',
|
||||
'status' => $status, 'outer_time' => time(), 'exec_desc' => $desc[0],
|
||||
]);
|
||||
$this->output->writeln(is_string($message) ? $message : '');
|
||||
return $result !== false;
|
||||
|
@ -24,15 +24,27 @@ use think\admin\Service;
|
||||
*/
|
||||
class TokenService extends Service
|
||||
{
|
||||
/**
|
||||
* 获取当前请求令牌
|
||||
* @return array|string
|
||||
*/
|
||||
public function getInputToken()
|
||||
{
|
||||
return $this->app->request->header('user-form-token', input('_csrf_', ''));
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证表单令牌是否有效
|
||||
* @param string $token 表单令牌
|
||||
* @param string $node 授权节点
|
||||
* @return boolean
|
||||
*/
|
||||
public function checkFormToken($token)
|
||||
public function checkFormToken($token = null, $node = null)
|
||||
{
|
||||
$service = NodeService::instance($this->app);
|
||||
list($node, $cache) = [$service->getCurrent(), $this->app->session->get($token, [])];
|
||||
if (is_null($token)) $token = $this->getInputToken();
|
||||
if (is_null($node)) $node = NodeService::instance($this->app)->getCurrent();
|
||||
// 读取缓存并检查是否有效
|
||||
$cache = $this->app->session->get($token, []);
|
||||
if (empty($cache['node']) || empty($cache['time']) || empty($cache['token'])) return false;
|
||||
if ($cache['token'] !== $token || $cache['time'] + 600 < time() || $cache['node'] !== $node) return false;
|
||||
return true;
|
||||
@ -40,11 +52,12 @@ class TokenService extends Service
|
||||
|
||||
/**
|
||||
* 清理表单CSRF信息
|
||||
* @param string $name
|
||||
* @param string $token
|
||||
*/
|
||||
public function clearFormToken($name = null)
|
||||
public function clearFormToken($token = null)
|
||||
{
|
||||
$this->app->session->delete($name);
|
||||
if (is_null($token)) $token = $this->getInputToken();
|
||||
$this->app->session->delete($token);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user