定时任务(部分)

This commit is contained in:
mkg
2021-08-26 15:31:36 +08:00
parent 3c1764e58d
commit 48eebc1c95
3 changed files with 141 additions and 97 deletions
+1 -37
View File
@@ -1,42 +1,6 @@
import datetime
from flask import current_app
from applications.extensions import db
from applications.extensions.init_apscheduler import scheduler
from applications.models import Dept
# @scheduler.task(
# "interval",
# id="job_sync",
# seconds=10,
# max_instances=1,
# start_date="2000-01-01 12:19:00",
# )
# def task1():
# # oh, do you need something from config?
# with scheduler.app.app_context():
# print(scheduler.app.config) # noqa: T001
# address = "ces"
# deptName = "测试"
# email = "123@qq.com"
# leader = "测试的"
# parentId = "1"
# phone = "123456"
# sort = "5"
# status = 1
# dept = Dept(
# parent_id=parentId,
# dept_name=deptName,
# sort=sort,
# leader=leader,
# phone=phone,
# email=email,
# status=status,
# address=address
# )
# r = db.session.add(dept)
# db.session.commit()
task_list = ['task2', 'task3', 'task4']
def task2(a, b):
+94 -38
View File
@@ -8,37 +8,60 @@
<div class="mainBox">
<div class="main-container">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">协议类型</label>
<div class="layui-form-item">
<label class="layui-form-label">ID标识</label>
<div class="layui-input-block">
<select name="type" lay-verify="required" lay-search>
<option value="http">http</option>
<option value="https">https</option>
</select>
<input type="text" name="id" lay-verify="title" autocomplete="off" placeholder="请输入任务id"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="title" autocomplete="off" placeholder="请输入标题"
<input type="text" name="name" lay-verify="title" autocomplete="off" placeholder="请输入名称"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">查询间隔时间</label>
<div class="layui-input-block">
<select name="frequency" lay-verify="required" lay-search>
{% for task in task_frequency_render %}
<option value="{{ task.key }}">{{ task.value}}</option>
{% endfor %}
<label class="layui-form-label">任务类型</label>
<div class="layui-input-block">
<select name="type" lay-filter="type" lay-verify="required" lay-search>
<option value="date">date 一次性指定固定时间,只执行一次</option>
<option value="interval">interval 间隔调度,隔多长时间执行一次</option>
<option value="cron">cron 指定相对时间执行</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">函数</label>
<div class="layui-input-block">
<select name="functions" lay-verify="required" lay-search>
{% for task in task_list %}
<option value="{{ task }}">{{ task }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="layui-form-item" id="datetimeItem">
<label class="layui-form-label">固定时间</label>
<div class="layui-input-block">
<input name="datetime" type="text" class="layui-input" id="datetime">
</div>
</div>
<div class="layui-form-item" style="display: none" id="timeItem">
<label class="layui-form-label">时间</label>
<div class="layui-input-block">
<input name="time" type="text" class="layui-input" id="time">
</div>
</div>
</select>
</div>
</div>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="role-save">
@@ -54,31 +77,64 @@
</form>
{% include 'admin/common/footer.html' %}
<script>
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
layui.use(['form', 'jquery'], function () {
form.on('submit(role-save)', function (data) {
$.ajax({
url: '/task/save',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function (result) {
if (result.success) {
layer.msg(result.msg, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('role-table')
let form = layui.form
let $ = layui.jquery
var laydate = layui.laydate;
laydate.render({
elem: '#datetime'
, type: 'datetime'
});
laydate.render({
elem: '#time'
, type: 'time'
});
form.on('select(type)', function (data) {
if (data.value === 'date') {
$('#timeItem').hide()
$('#datetimeItem').show()
} else if (data.value === 'interval') {
console.log('interval')
$('#datetimeItem').hide()
$('#timeItem').show()
$('#timeItem').val('')
} else if (data.value === 'cron') {
console.log('cron')
$('#datetimeItem').hide()
$('#timeItem').show()
$('#timeItem').val('')
}
})
form.on('submit(role-save)', function (data) {
$.ajax({
url: '/admin/task/save',
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function (result) {
if (result.success) {
layer.msg(result.msg, {icon: 1, time: 1000}, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('role-table')
})
} else {
layer.msg(result.msg, {icon: 2, time: 1000})
}
}
})
} else {
layer.msg(result.msg, { icon: 2, time: 1000 })
}
}
})
return false
return false
})
})
})
</script>
</body>
</html>
+46 -22
View File
@@ -1,29 +1,16 @@
from flask import Blueprint, request, render_template
from flask_apscheduler.utils import job_to_dict
from applications.common.tasks.tasks import task2, task3, task4
from applications.common.tasks import tasks
from applications.common.tasks.tasks import task_list
from applications.common.utils.http import table_api, fail_api, success_api
from applications.extensions.init_apscheduler import scheduler
admin_task = Blueprint('adminTask', __name__, url_prefix='/admin/task')
# 暂停任务
# scheduler.pause_job('third')
# 恢复任务
# time.sleep(10)
# scheduler.resume_job('third')
# 删除任务
# scheduler.remove_job('first')
@admin_task.route('/add_job', methods=['GET'])
def add_task():
tasks = {
"task2": task2,
"task3":task3,
"task4":task4
}
scheduler.add_job(func=tasks.get(), id='4', args=(1, 1), trigger='interval', seconds=3,
replace_existing=True)
return '6'
@@ -40,22 +27,61 @@ def get_task(): # 获取
jobs_list = []
for job in jobs:
jobs_list.append(job_to_dict(job))
return table_api(data=jobs_list)
return table_api(data=jobs_list, count=len(jobs_list))
# 增加
@admin_task.get('/add')
def add():
return render_template('admin/task/add.html')
return render_template('admin/task/add.html', task_list=task_list)
@admin_task.post('/save')
def save():
_id = request.json.get("id")
name = request.json.get("id")
type = request.json.get("type")
functions = request.json.get("functions")
datetime = request.json.get("datetime")
time = request.json.get("time")
if not hasattr(tasks, functions):
return fail_api()
if type == 'date':
scheduler.add_job(
func=getattr(tasks, functions),
id=_id,
name=name,
args=(1, 1),
trigger=type,
run_date=datetime,
replace_existing=True)
elif type == 'interval':
scheduler.add_job(
func=getattr(tasks, functions),
id=_id,
name=name,
args=(1, 1),
trigger=type,
replace_existing=True)
elif type == 'cron':
scheduler.add_job(
func=getattr(tasks, functions),
id=_id,
name=name,
args=(1, 1),
trigger=type,
replace_existing=True)
return success_api()
# 恢复
@admin_task.put('/enable')
def enable():
id = request.json.get('id')
_id = request.json.get('id')
# print(id)
if id:
scheduler.resume_job(str(id))
if _id:
scheduler.resume_job(str(_id))
return success_api(msg="启动成功")
return fail_api(msg="数据错误")
@@ -75,8 +101,6 @@ def remove_job(_id): # 移除
scheduler.remove_job(str(_id))
return success_api(msg="删除成功")
# scheduler.add_job(func=task1, id='2', args=(1, 1), trigger='cron', day_of_week='0-6', hour=18, minute=24,
# second=10, replace_existing=True)