task dd
This commit is contained in:
parent
d944c7084d
commit
a0b873510b
|
@ -1 +1 @@
|
|||
2664
|
||||
11768
|
||||
|
|
|
@ -33,16 +33,16 @@ app.conf.update(
|
|||
'schedule': crontab(minute=2),
|
||||
#'args': (5, 6)
|
||||
},
|
||||
'grid-task': {
|
||||
'task': 'safesite.tasks.gridtasksend',
|
||||
'schedule': timedelta(minutes=1),
|
||||
#'args': (5, 6)
|
||||
},
|
||||
'riskact-task': {
|
||||
'task': 'safesite.tasks.riskacttask',
|
||||
'schedule': timedelta(minutes=1),
|
||||
#'args': (5, 6)
|
||||
},
|
||||
# 'grid-task': {
|
||||
# 'task': 'safesite.tasks.gridtasksend',
|
||||
# 'schedule': timedelta(minutes=1),
|
||||
# #'args': (5, 6)
|
||||
# },
|
||||
# 'riskact-task': {
|
||||
# 'task': 'safesite.tasks.riskacttask',
|
||||
# 'schedule': timedelta(minutes=1),
|
||||
# #'args': (5, 6)
|
||||
# },
|
||||
'check-task': {
|
||||
'task': 'safesite.tasks.checktask',
|
||||
'schedule': timedelta(minutes=1),
|
||||
|
|
|
@ -42,7 +42,7 @@ INSTALLED_APPS = [
|
|||
'safesite.templatetags',
|
||||
'groups',
|
||||
'captcha',
|
||||
|
||||
'django_celery_beat'
|
||||
]
|
||||
# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
|
||||
CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',)
|
||||
|
@ -142,12 +142,14 @@ STATIC_ROOT = os.path.join(BASE_DIR, 'static')
|
|||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||
MEDIA_URL = '/media/'
|
||||
|
||||
###配置Broker
|
||||
###配置celery
|
||||
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
|
||||
CELERY_BROKER_TRANSPORT = 'redis'
|
||||
CELERYD_MAX_TASKS_PER_CHILD = 10
|
||||
CELERY_TIMEZONE='Asia/Shanghai'
|
||||
CELERY_ENABLE_UTC=True
|
||||
# CELERY_ENABLE_UTC=True
|
||||
DJANGO_CELERY_BEAT_TZ_AWARE = False
|
||||
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
|
||||
|
||||
##配置session
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
|
|
|
@ -6,7 +6,8 @@ admin.site.register(models.Trouble)
|
|||
admin.site.register(models.Dicclass)
|
||||
admin.site.register(models.Dickey)
|
||||
admin.site.register(models.Partment)
|
||||
|
||||
admin.site.register(models.MySchedule)
|
||||
admin.site.register(models.GridTaskSet)
|
||||
@admin.register(models.Menu)
|
||||
class Menuadmin(admin.ModelAdmin):
|
||||
list_display = ('menuname','menucode','type','url')
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
# Generated by Django 2.2.8 on 2020-09-08 11:19
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('django_celery_beat', '0012_periodictask_expire_seconds'),
|
||||
('safesite', '0350_auto_20200906_2344'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.RemoveField(
|
||||
model_name='gridtaskset',
|
||||
name='count',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='gridtaskset',
|
||||
name='create_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='gridtaskset',
|
||||
name='is_paused',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='gridtaskset',
|
||||
name='start_task',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gridtaskset',
|
||||
name='periodictask',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_celery_beat.PeriodicTask'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='MySchedule',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('crontab', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='django_celery_beat.CrontabSchedule')),
|
||||
('interval', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='django_celery_beat.IntervalSchedule')),
|
||||
('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,27 @@
|
|||
# Generated by Django 2.2.8 on 2020-09-08 11:51
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0351_auto_20200908_1119'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.RemoveField(
|
||||
model_name='gridtaskset',
|
||||
name='schedule',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='gridtaskset',
|
||||
name='periodictask',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='gridtaskset_periodictask', to='django_celery_beat.PeriodicTask'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 2.2.8 on 2020-09-08 13:11
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0352_auto_20200908_1151'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.AddField(
|
||||
model_name='gridtaskset',
|
||||
name='expire',
|
||||
field=models.IntegerField(blank=True, null=True, verbose_name='有效期'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gridtaskset',
|
||||
name='myschedule',
|
||||
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='safesite.MySchedule'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='myschedule',
|
||||
name='name',
|
||||
field=models.CharField(default='每10秒', max_length=1000, verbose_name='名称'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -0,0 +1,27 @@
|
|||
# Generated by Django 2.2.8 on 2020-09-08 14:07
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0353_auto_20200908_1311'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.AddField(
|
||||
model_name='gridtaskset',
|
||||
name='start_time',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='开始派发时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='gridtaskset',
|
||||
name='expire',
|
||||
field=models.IntegerField(blank=True, null=True, verbose_name='派发有效期'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 2.2.8 on 2020-09-08 14:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0354_auto_20200908_1407'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
]
|
|
@ -0,0 +1,27 @@
|
|||
# Generated by Django 2.2.8 on 2020-09-08 16:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0355_remove_companyinfo_liaison_fax'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# migrations.RemoveField(
|
||||
# model_name='companyinfo',
|
||||
# name='liaison_fax',
|
||||
# ),
|
||||
migrations.AddField(
|
||||
model_name='myschedule',
|
||||
name='deletemark',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='myschedule',
|
||||
name='typeset',
|
||||
field=models.CharField(default=1, max_length=10, verbose_name='类型'),
|
||||
),
|
||||
]
|
|
@ -1041,6 +1041,16 @@ class EdulessonWatch(models.Model): # 在线视频观看情况表
|
|||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
submittime = models.DateTimeField(default=timezone.now)
|
||||
|
||||
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule
|
||||
|
||||
class MySchedule(models.Model):
|
||||
name = models.CharField('名称', max_length=1000)
|
||||
typeset = models.CharField('类型', default=1,max_length=10)
|
||||
deletemark = models.IntegerField(default=1)
|
||||
interval = models.ForeignKey(IntervalSchedule, null=True, blank=True, on_delete=models.SET_NULL)
|
||||
crontab = models.ForeignKey(CrontabSchedule, null=True, blank=True, on_delete=models.SET_NULL)
|
||||
usecomp = models.ForeignKey(
|
||||
Partment, on_delete=models.CASCADE)
|
||||
|
||||
class GridTaskSet(models.Model):
|
||||
"""
|
||||
|
@ -1049,12 +1059,11 @@ class GridTaskSet(models.Model):
|
|||
riskact = models.ForeignKey(RiskAct, on_delete=models.CASCADE, related_name='gridtaskset_riskact')
|
||||
gridlevel = models.ForeignKey(Dickey, on_delete=models.CASCADE, verbose_name='网格化层级')
|
||||
user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='执行人')
|
||||
schedule = JSONField('定时配置',null=True, blank=True)
|
||||
note = models.TextField('检查备注', null=True)
|
||||
start_task = models.DateTimeField('最近/初始派发时间', null=True, blank=True)
|
||||
is_paused = models.BooleanField(default=True, verbose_name='是否暂停派发')
|
||||
count = models.IntegerField('任务派发次数', default=0)
|
||||
create_time = models.DateTimeField(auto_now_add=True)
|
||||
myschedule = models.ForeignKey(MySchedule,on_delete=models.CASCADE)
|
||||
start_time = models.DateTimeField('开始派发时间', null=True, blank=True)
|
||||
expire = models.IntegerField('派发有效期', null=True, blank=True)
|
||||
periodictask = models.ForeignKey(PeriodicTask, on_delete=models.CASCADE, related_name='gridtaskset_periodictask')
|
||||
|
||||
class RiskActTask(models.Model): # 风险点排查执行记录
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
|
|
@ -291,21 +291,6 @@ def gridtasksend():
|
|||
|
||||
from dateutil.relativedelta import *
|
||||
|
||||
# def shifttime(number, type_, time1):
|
||||
# if type_ is 'hours':
|
||||
# return time1 + relativedelta(hours=+number)
|
||||
# elif type_ is 'days':
|
||||
# return time1 + relativedelta(days=+number)
|
||||
# elif type_ is 'weeks':
|
||||
# return time1 + relativedelta(weeks=+number)
|
||||
# elif type_ is 'months':
|
||||
# return time1 + relativedelta(months=+number)
|
||||
# elif type_ is 'years':
|
||||
# return time1 + relativedelta(years=+number)
|
||||
# elif type_ is 'seconds':
|
||||
# print(time1, time1 + relativedelta(seconds=+number))
|
||||
# return time1 + relativedelta(seconds=+number)
|
||||
|
||||
def sendGridtask(obj):
|
||||
nowtime = datetime.datetime.now()
|
||||
schedule = obj.schedule
|
||||
|
@ -323,6 +308,17 @@ def sendGridtask(obj):
|
|||
else:
|
||||
pass
|
||||
|
||||
@shared_task
|
||||
def sendGridtask2(**kwargs):
|
||||
obj = GridTaskSet.objects.get(id=kwargs['gridtaskset'])
|
||||
RiskActTask.objects.filter(taskset=obj, usable=1).update(usable=0)
|
||||
nowtime = datetime.datetime.now()
|
||||
if obj.expire:
|
||||
newm = nowtime + datetime.timedelta(hours=int(obj.expire))
|
||||
RiskActTask.objects.create(riskact=obj.riskact,taskexpire = newm,taskadd=nowtime,istask=1,taskset=obj,tasknote=obj.note,user=obj.user)
|
||||
else:
|
||||
RiskActTask.objects.create(riskact=obj.riskact,taskadd=nowtime,istask=1,taskset=obj,tasknote=obj.note,user=obj.user)
|
||||
|
||||
@shared_task
|
||||
def checktask():
|
||||
nowtime = datetime.datetime.now()
|
||||
|
|
|
@ -105,29 +105,31 @@
|
|||
{ field: 'id', title: 'ID', hidden: true },
|
||||
{ field: 'gridlevel__dickeyname', title: '网格层级', width: 100 },
|
||||
{ field: 'user__name', title: '执行人', width: 100 },
|
||||
{ field: 'schedule', title: '任务周期', width: 100 ,
|
||||
formatter: function (value, row, index) {
|
||||
if(value.hasOwnProperty('interval')){
|
||||
return value.interval.replace(',hours', '小时').replace(',days', '天').replace(',weeks', '星期').replace(',months', '月').replace(',years', '年').replace(',seconds', '秒')
|
||||
}
|
||||
}
|
||||
{ field: 'myschedule__name', title: '任务策略', width: 100 ,
|
||||
// formatter: function (value, row, index) {
|
||||
// if(value.hasOwnProperty('interval')){
|
||||
// return value.interval.replace(',hours', '小时').replace(',days', '天').replace(',weeks', '星期').replace(',months', '月').replace(',years', '年').replace(',seconds', '秒')
|
||||
// }
|
||||
// }
|
||||
},
|
||||
{ field: 'start_task', title: '最近/初始派发时间', width: 200 },
|
||||
{ field: 'is_paused', title: '派发状态', width: 100,
|
||||
{ field: 'periodictask__start_time', title: '开始派发时间', width: 150 },
|
||||
{ field: 'periodictask__last_run_at', title: '最近派发时间', width: 150 },
|
||||
{ field: 'periodictask__enabled', title: '派发状态', width: 100,
|
||||
formatter: function (value, row, index) {
|
||||
switch (value) {
|
||||
case false: return '正常'; break;
|
||||
case true: return '暂停'; break;
|
||||
case true: return '正常'; break;
|
||||
case false: return '暂停'; break;
|
||||
}
|
||||
},
|
||||
styler: function (value, row, index) {
|
||||
switch (value) {
|
||||
case false: return 'font-weight:bold;color:green'; break;
|
||||
case true: return 'color:red;font-weight:bold'; break;
|
||||
case true: return 'font-weight:bold;color:green'; break;
|
||||
case false: return 'color:red;font-weight:bold'; break;
|
||||
}
|
||||
}
|
||||
},
|
||||
{ field: 'count', title: '已派发次数', width: 100 },
|
||||
{ field: 'periodictask__total_run_count', title: '已派发次数', width: 100 },
|
||||
{ field: 'note', title: '执行备注', width: 100 },
|
||||
]],
|
||||
});
|
||||
|
||||
|
@ -153,9 +155,9 @@
|
|||
function togglegridtaskset() {
|
||||
var row = $('#girdtasksettable').datagrid('getSelected');
|
||||
if (row) {
|
||||
var msg = '确定暂停派发吗?'
|
||||
if(row.is_paused){
|
||||
msg = '确定启动派发吗?'
|
||||
var msg = '确定启动派发吗?'
|
||||
if(row.periodictask__enabled){
|
||||
msg = '确定暂停派发吗?'
|
||||
}
|
||||
$.messager.confirm('提示', msg, function (r) {
|
||||
if (r) {
|
||||
|
|
|
@ -25,12 +25,23 @@
|
|||
<input id="note" name="note" class="easyui-textbox" style="width:480px;height:80px" data-options="label:'检查备注',multiline:true,">
|
||||
</div>
|
||||
<div style="margin-bottom:5px;">
|
||||
<label style='display:inline-block;'>最近/初始派发时间</label>
|
||||
<input id="start_task" name="start_task" class="easyui-datetimebox" style="width:auto"
|
||||
<label style='display:inline-block;'>开始派发时间</label>
|
||||
<input id="start_time" name="start_time" class="easyui-datetimebox" style="width:auto"
|
||||
data-options="currentText:'今天',closeText:'关闭',showSeconds:false" required=true />
|
||||
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="myschedule" class="easyui-combobox" name="myschedule" style="width:480px" data-options="
|
||||
label:'策略',
|
||||
url: 'api/myschedule/?a=listcombobox',
|
||||
method: 'get',
|
||||
editable: false,"
|
||||
required=true>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="expire" name="expire" type="text" class="easyui-numberbox" value="8" data-options="label:'有效期(小时)'"/>
|
||||
</div>
|
||||
<!-- <div style="margin-bottom:5px">
|
||||
<label style='display:inline-block;'>定时配置</label>
|
||||
<span style="font-weight:bold">每隔</span>
|
||||
<input id="setnumber" name="setnumber" type="text" class="easyui-numberbox" value="1" data-options="min:1,max:31"/>
|
||||
|
@ -42,7 +53,7 @@
|
|||
<option value="months">月</option>
|
||||
<option value="years">年</option>
|
||||
</select>
|
||||
</div>
|
||||
</div> -->
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
|
@ -71,8 +82,8 @@
|
|||
function submitform() {
|
||||
var data = $('#gridtasksetff').serializeJSON();
|
||||
data['riskact'] = riskact
|
||||
var mm = $('#setnumber').numberbox('getValue')+','+$('#unit').val()
|
||||
data['schedule'] = {'interval':mm}
|
||||
// var mm = $('#setnumber').numberbox('getValue')+','+$('#unit').val()
|
||||
// data['schedule'] = {'interval':mm}
|
||||
$.messager.confirm('提示', '确定创建并开始派发任务吗?', function (r) {
|
||||
if (r) {
|
||||
$.ajax({
|
||||
|
|
|
@ -25,12 +25,23 @@
|
|||
<input id="note" name="note" class="easyui-textbox" style="width:480px;height:80px" data-options="label:'检查备注',multiline:true,">
|
||||
</div>
|
||||
<div style="margin-bottom:5px;">
|
||||
<label style='display:inline-block;'>最近/初始派发时间</label>
|
||||
<input id="start_task" editable="false" name="start_task" class="easyui-datetimebox" style="width:auto"
|
||||
<label style='display:inline-block;'>开始派发时间</label>
|
||||
<input id="start_time" editable="false" name="start_time" class="easyui-datetimebox" style="width:auto"
|
||||
data-options="currentText:'今天',closeText:'关闭',showSeconds:false" required=true />
|
||||
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="myschedule" class="easyui-combobox" name="myschedule" style="width:480px" data-options="
|
||||
label:'策略',
|
||||
url: 'api/myschedule/?a=listcombobox',
|
||||
method: 'get',
|
||||
editable: false,"
|
||||
required=true>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="expire" name="expire" type="text" class="easyui-numberbox" value="8" data-options="label:'有效期(小时)'"/>
|
||||
</div>
|
||||
<!-- <div style="margin-bottom:5px">
|
||||
<label style='display:inline-block;'>定时配置</label>
|
||||
<span style="font-weight:bold">每隔</span>
|
||||
<input id="setnumber" name="setnumber" type="text" class="easyui-numberbox" value="1" data-options="min:1,max:31"/>
|
||||
|
@ -42,7 +53,7 @@
|
|||
<option value="months">月</option>
|
||||
<option value="years">年</option>
|
||||
</select>
|
||||
</div>
|
||||
</div> -->
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
|
@ -53,12 +64,13 @@
|
|||
$('#username').textbox('setValue',data.user__name)
|
||||
$('#user').val(data.user__userid)
|
||||
$('#note').textbox('setValue',data.note)
|
||||
$('#start_task').datetimebox('setValue', data.start_task)
|
||||
if(data.schedule.hasOwnProperty('interval')){
|
||||
var interval = data.schedule.interval.split(',')
|
||||
$('#setnumber').numberbox('setValue', interval[0])
|
||||
$('#unit').val(interval[1])
|
||||
}
|
||||
$('#myschedule').combobox('setValue',data.myschedule__id)
|
||||
$('#start_time').datetimebox('setValue', data.periodictask__start_time)
|
||||
// if(data.schedule.hasOwnProperty('interval')){
|
||||
// var interval = data.schedule.interval.split(',')
|
||||
// $('#setnumber').numberbox('setValue', interval[0])
|
||||
// $('#unit').val(interval[1])
|
||||
// }
|
||||
})
|
||||
function choseuser() {
|
||||
var myh = screen.availHeight * 0.5;
|
||||
|
@ -84,8 +96,8 @@
|
|||
function submitform() {
|
||||
var data = $('#gridtasksetff').serializeJSON();
|
||||
data['id']=girdtasksetid
|
||||
var mm = $('#setnumber').numberbox('getValue')+','+$('#unit').val()
|
||||
data['schedule'] = {'interval':mm}
|
||||
// var mm = $('#setnumber').numberbox('getValue')+','+$('#unit').val()
|
||||
// data['schedule'] = {'interval':mm}
|
||||
$.messager.confirm('提示', '确定修改吗?', function (r) {
|
||||
if (r) {
|
||||
$.ajax({
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
<div class="easyui-layout" style="width:100%;height:100%;">
|
||||
|
||||
<div id="schedulesetbar" style="padding:5px;height:auto">
|
||||
<a onclick="addscheduleset()" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-plus',plain:true">新增</a>
|
||||
|
||||
<!-- <a onclick="editscheduleset()" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-pencil',plain:true">编辑</a> -->
|
||||
|
||||
<a onclick="delgirdtaskset()" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-trash',plain:true">删除</a>
|
||||
|
||||
</div>
|
||||
<table id="schedulesettable" style="height:100%;width:auto"></table>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
$('#schedulesettable').datagrid({
|
||||
url: 'api/myschedule/?a=listall',
|
||||
rownumbers: true,
|
||||
singleSelect: true,
|
||||
striped: true,
|
||||
method: 'get',
|
||||
toolbar: '#schedulesetbar',
|
||||
pagination: 'true',
|
||||
pageSize: 20,
|
||||
columns: [[
|
||||
{ field: 'id', title: 'ID', hidden: true },
|
||||
{ field: 'name', title: '名称', width: 500 },
|
||||
]],
|
||||
});
|
||||
|
||||
function addscheduleset(){
|
||||
opendg('新增定时策略','html/scheduleset/add/')
|
||||
|
||||
}
|
||||
function editscheduleset(){
|
||||
var row = $('#schedulesettable').datagrid('getSelected');
|
||||
if (row) {
|
||||
opendg('编辑','html/scheduleset/edit/' + row.id)
|
||||
}
|
||||
else {
|
||||
$.messager.alert('提示', '请先选择一个策略!');
|
||||
}
|
||||
}
|
||||
function delgirdtaskset() {
|
||||
var row = $('#schedulesettable').datagrid('getSelected');
|
||||
if (row) {
|
||||
$.messager.confirm('提示', '确定删除吗?', function (r) {
|
||||
if (r) {
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: 'api/scheduleset?a=del&id=' + row.id,
|
||||
datatype: "json",
|
||||
beforeSend: function () { },
|
||||
success: function (data) {
|
||||
if (data.code == 1) {
|
||||
$("#schedulesettable").datagrid('reload');
|
||||
} else {
|
||||
$.messager.alert('提示', '您无权删除!');
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
complete: function (XMLHttpRequest, textStatus) {
|
||||
},
|
||||
|
||||
error: function () {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
$.messager.alert('提示', '未选择数据!');
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,97 @@
|
|||
<div class="easyui-layout" style="width:100%;height:100%">
|
||||
<div id='southdiv' data-options="region:'south'" style="width:100%;height:50px;padding:5px">
|
||||
<div style="text-align:center;padding:2px">
|
||||
<a id="submitb" class="easyui-linkbutton" iconCls="fa-floppy-o" onclick="submitform()">保存</a>
|
||||
<a class="easyui-linkbutton" iconCls="fa-close" onclick="javascript:$('#dd').dialog('close')">取消</a>
|
||||
</div>
|
||||
</div>
|
||||
<div data-options="region:'center'" style="width:100%;height:100%;padding:5px 15px;">
|
||||
<form method="post" id="schedulesetff">
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="name" class="easyui-textbox" name="name" style="width:480px" data-options="
|
||||
label:'名称'"
|
||||
required=true>
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<select id="set" class="easyui-combobox" name="set" style="width:200px" data-options="
|
||||
label:'配置方案',
|
||||
onSelect: function(res){
|
||||
if(res.value=='interval'){
|
||||
$('#set1').show()
|
||||
$('#set2').hide()
|
||||
}else{
|
||||
$('#set2').show()
|
||||
$('#set1').hide()
|
||||
}
|
||||
|
||||
}
|
||||
"
|
||||
>
|
||||
<option value="interval">简单配置</option>
|
||||
<option value="crontab">高级配置</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="margin-bottom:5px" id="set1">
|
||||
<label style='display:inline-block;'>简单配置</label>
|
||||
<span style="font-weight:bold">每隔</span>
|
||||
<input id="every" name="every" type="text" class="easyui-numberbox" value="1" data-options="min:1,max:31"/>
|
||||
<select id="period" class="easyui-combobox" style="width:80px" name="period">
|
||||
|
||||
|
||||
<option value="days">天</option>
|
||||
|
||||
<option value="hours">小时</option>
|
||||
<option value="minutes">分</option>
|
||||
<option value="seconds">秒</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="set2">
|
||||
<div >高级配置</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="minute" class="easyui-textbox" name="minute" style="width:480px" data-options="label:'分钟'" value="*">
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="hour" class="easyui-textbox" name="hour" style="width:480px" data-options="label:'小时'" value="*">
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="day_of_week" class="easyui-textbox" name="day_of_week" style="width:480px" data-options="label:'每周中的天'" value="*">
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="day_of_month" class="easyui-textbox" name="day_of_month" style="width:480px" data-options="label:'每月中的天'" value="*">
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="month_of_year" class="easyui-textbox" name="month_of_year" style="width:480px" data-options="label:'每年中的月'" value="*">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
function submitform() {
|
||||
var data = $('#schedulesetff').serializeJSON();
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'api/myschedule/?a=add',
|
||||
data: JSON.stringify(data),
|
||||
datatype: "json",
|
||||
processData: false,
|
||||
contentType: "application/json;charset=utf-8",
|
||||
beforeSend: function () {
|
||||
var bo = $('#schedulesetff').form('validate')
|
||||
if (bo == false) {
|
||||
return bo
|
||||
} else {
|
||||
$('#submitb').linkbutton('disable');
|
||||
}
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.code == 1) {
|
||||
$("#schedulesettable").datagrid('reload');
|
||||
$("#dd").dialog("close");
|
||||
} else { $.messager.alert('提示', '失败!'); }
|
||||
$('#submitb').linkbutton('enable');
|
||||
},
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
</div>
|
|
@ -0,0 +1,131 @@
|
|||
<div class="easyui-layout" style="width:100%;height:100%">
|
||||
<div id='southdiv' data-options="region:'south'" style="width:100%;height:50px;padding:5px">
|
||||
<div style="text-align:center;padding:2px">
|
||||
<a id="submitb" class="easyui-linkbutton" iconCls="fa-floppy-o" onclick="submitform()">保存</a>
|
||||
<a class="easyui-linkbutton" iconCls="fa-close" onclick="javascript:$('#dd').dialog('close')">取消</a>
|
||||
</div>
|
||||
</div>
|
||||
<div data-options="region:'center'" style="width:100%;height:100%;padding:5px 15px;">
|
||||
<form method="post" id="gridtasksetff">
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="gridlevel" class="easyui-combobox" name="gridlevel" style="width:480px" data-options="
|
||||
label:'网格类型',
|
||||
url: 'getdickey?a=combobox&dicclass=58',
|
||||
method: 'get',
|
||||
editable: false,"
|
||||
required=true>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="username" name="username" class="easyui-textbox" style="width:480px" data-options="label:'执行人', editable:false"
|
||||
required=true >
|
||||
<input type="hidden" name="user" id="user"/>
|
||||
<a class='easyui-linkbutton' onclick="choseuser()" style="width:auto">选择</a>
|
||||
</div>
|
||||
<div style="margin-bottom:5px">
|
||||
<input id="note" name="note" class="easyui-textbox" style="width:480px;height:80px" data-options="label:'检查备注',multiline:true,">
|
||||
</div>
|
||||
<div style="margin-bottom:5px;">
|
||||
<label style='display:inline-block;'>开始派发时间</label>
|
||||
<input id="start_time" editable="false" name="start_time" class="easyui-datetimebox" style="width:auto"
|
||||
data-options="currentText:'今天',closeText:'关闭',showSeconds:false" required=true />
|
||||
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="myschedule" class="easyui-combobox" name="myschedule" style="width:480px" data-options="
|
||||
label:'策略',
|
||||
url: 'api/myschedule/?a=listcombobox',
|
||||
method: 'get',
|
||||
editable: false,"
|
||||
required=true>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="expire" name="expire" type="text" class="easyui-numberbox" value="8" data-options="label:'有效期(小时)'"/>
|
||||
</div>
|
||||
<!-- <div style="margin-bottom:5px">
|
||||
<label style='display:inline-block;'>定时配置</label>
|
||||
<span style="font-weight:bold">每隔</span>
|
||||
<input id="setnumber" name="setnumber" type="text" class="easyui-numberbox" value="1" data-options="min:1,max:31"/>
|
||||
<select id="unit" class="easyui-combobox" style="width:80px">
|
||||
<option value="seconds">秒</option>
|
||||
<option value="hours">小时</option>
|
||||
<option value="days">天</option>
|
||||
<option value="weeks">周</option>
|
||||
<option value="months">月</option>
|
||||
<option value="years">年</option>
|
||||
</select>
|
||||
</div> -->
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var girdtasksetid = {{id}}
|
||||
$.get('api/gridtaskset?a=detail&id='+girdtasksetid,function(res){
|
||||
var data = res.data
|
||||
$('#gridlevel').combobox('setValue', data.gridlevel__dickeyid)
|
||||
$('#username').textbox('setValue',data.user__name)
|
||||
$('#user').val(data.user__userid)
|
||||
$('#note').textbox('setValue',data.note)
|
||||
$('#myschedule').combobox('setValue',data.myschedule__id)
|
||||
$('#start_time').datetimebox('setValue', data.periodictask__start_time)
|
||||
// if(data.schedule.hasOwnProperty('interval')){
|
||||
// var interval = data.schedule.interval.split(',')
|
||||
// $('#setnumber').numberbox('setValue', interval[0])
|
||||
// $('#unit').val(interval[1])
|
||||
// }
|
||||
})
|
||||
function choseuser() {
|
||||
var myh = screen.availHeight * 0.5;
|
||||
$('#userdd').dialog({
|
||||
maximizable: true,
|
||||
title: '选择人员',
|
||||
width: 700,
|
||||
height: myh,
|
||||
closed: false,
|
||||
cache: false,
|
||||
href: 'getuserf?a=user',
|
||||
modal: true,
|
||||
border:false,
|
||||
});
|
||||
$('#userdd').window('center');
|
||||
}
|
||||
function aaa(x) {
|
||||
if (x == "user") {
|
||||
$('#user').attr('value', top.$('#in').val());
|
||||
$('#username').textbox('setValue', top.$('#in').attr('show'));
|
||||
}
|
||||
}
|
||||
function submitform() {
|
||||
var data = $('#gridtasksetff').serializeJSON();
|
||||
data['id']=girdtasksetid
|
||||
// var mm = $('#setnumber').numberbox('getValue')+','+$('#unit').val()
|
||||
// data['schedule'] = {'interval':mm}
|
||||
$.messager.confirm('提示', '确定修改吗?', function (r) {
|
||||
if (r) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'api/gridtaskset/?a=edit',
|
||||
data: JSON.stringify(data),
|
||||
datatype: "json",
|
||||
processData: false,
|
||||
contentType: "application/json;charset=utf-8",
|
||||
beforeSend: function () {
|
||||
var bo = $('#gridtasksetff').form('validate')
|
||||
if (bo == false) {
|
||||
return bo
|
||||
} else {
|
||||
$('#submitb').linkbutton('disable');
|
||||
}
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.code == 1) {
|
||||
$("#girdtasksettable").datagrid('reload');
|
||||
$("#dd").dialog("close");
|
||||
} else { $.messager.alert('提示', '失败!'); }
|
||||
$('#submitb').linkbutton('enable');
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
</div>
|
|
@ -127,6 +127,10 @@ urlpatterns = [
|
|||
path('html/checkdetail/<int:id>/',views.checkdetail),#任务分配详情
|
||||
#html页面
|
||||
|
||||
# 任务策略配置
|
||||
path('html/scheduleset/', views.scheduleset),
|
||||
path('html/scheduleset/add/', views.schedulesetadd),
|
||||
path('html/scheduleset/edit/<int:id>/',views.schedulesetedit),
|
||||
|
||||
path('getuser', views.getuser),
|
||||
path('addyh', views.addyh),
|
||||
|
@ -198,6 +202,7 @@ urlpatterns = [
|
|||
path('api/equipmentcheckform/<int:pk>',viewsdrf.EquipmentCheckFormDetailView.as_view()),
|
||||
path('api/equipmentcheckform',viewsdrf.EquipmentCheckFormAPIView.as_view()),
|
||||
path('api/gridtaskset/',views.apigridtaskset),
|
||||
path('api/myschedule/',views.apimyschedule),
|
||||
|
||||
|
||||
path('api/examtestrate',views.apiexamtestrate),
|
||||
|
|
|
@ -216,6 +216,15 @@ def gridtasksetadd(req, riskact):
|
|||
def gridtasksetedit(req, id):
|
||||
return render(req, 'gridtasksetedit.html', {'id': id})
|
||||
|
||||
def scheduleset(req):
|
||||
return render(req, 'scheduleset.html')
|
||||
|
||||
def schedulesetadd(req):
|
||||
return render(req, 'schedulesetadd.html')
|
||||
|
||||
def schedulesetedit(req, id):
|
||||
return render(req, 'schedulesetedit.html', {'id': id})
|
||||
|
||||
def inspect(req):
|
||||
return render(req, 'inspect.html')
|
||||
|
||||
|
@ -7059,6 +7068,41 @@ def apiriskact(req):
|
|||
riskact=obj, taskadd=tasktime, taskexpire=tasktime + timedelta(days=7), istask=1)
|
||||
return JsonResponse({"code": 1})
|
||||
|
||||
def apimyschedule(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
if a == 'listcombobox':
|
||||
objs = MySchedule.objects.filter(usecomp__partid=companyid,deletemark=1)
|
||||
objsdata = objs.values('id','name')
|
||||
keystr = transstr(objsdata, 'id', 'name')
|
||||
return HttpResponse(keystr, content_type="application/json")
|
||||
elif a == 'listall':
|
||||
objs = MySchedule.objects.filter(usecomp__partid=companyid, deletemark=1)
|
||||
total = objs.count()
|
||||
startnum, endnum = fenye(req)
|
||||
objdata = objs.order_by('-pk')[startnum:endnum].values('id', 'name')
|
||||
return HttpResponse(transjson(total, objdata), content_type="application/json")
|
||||
elif a == 'add':
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
print(data)
|
||||
if data['set'] == 'interval':
|
||||
iobj = IntervalSchedule()
|
||||
iobj.every = data['every']
|
||||
iobj.period = data['period']
|
||||
iobj.save()
|
||||
MySchedule.objects.create(name=data['name'], typeset=data['set'], interval=iobj, usecomp=Partment.objects.get(partid=companyid))
|
||||
elif data['set'] == 'crontab':
|
||||
iobj = CrontabSchedule()
|
||||
iobj.minute = data['minute']
|
||||
iobj.hour = data['hour']
|
||||
iobj.day_of_week = data['day_of_week']
|
||||
iobj.day_of_month = data['day_of_month']
|
||||
iobj.month_of_year = data['month_of_year']
|
||||
iobj.timezone = 'Asia/Shanghai'
|
||||
iobj.save()
|
||||
MySchedule.objects.create(name=data['name'], typeset=data['set'], crontab=iobj, usecomp=Partment.objects.get(partid=companyid))
|
||||
return JsonResponse({'code': 1})
|
||||
def apigridtaskset(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
|
@ -7070,30 +7114,42 @@ def apigridtaskset(req):
|
|||
total = objs.count()
|
||||
startnum, endnum = fenye(req)
|
||||
objs = objs.order_by('-pk')[startnum:endnum].values('id', 'gridlevel__dickeyname', 'user__name',
|
||||
'schedule', 'note', 'start_task', 'is_paused', 'count')
|
||||
'myschedule__name', 'note', 'periodictask__enabled','periodictask__start_time','periodictask__last_run_at','periodictask__total_run_count')
|
||||
return HttpResponse(transjson(total, objs), content_type="application/json")
|
||||
elif a == 'add':
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
obj = GridTaskSet()
|
||||
obj.riskact = RiskAct.objects.get(id=data['riskact'])
|
||||
obj.user = User.objects.get(userid=data['user'])
|
||||
obj.gridlevel = Dickey.objects.get(dickeyid=data['gridlevel'])
|
||||
obj.note = data['note'] if 'note' in data and data['note'] else None
|
||||
obj.start_task = data['start_task']
|
||||
obj.schedule = data['schedule']
|
||||
obj.is_paused = False
|
||||
obj.save()
|
||||
if 'myschedule' in data and data['myschedule']:
|
||||
schobj = MySchedule.objects.get(id=data['myschedule'])
|
||||
pobj = PeriodicTask()
|
||||
pobj.name = 'gridtask_' + time.strftime('%Y%m%d%H%M%S')
|
||||
pobj.task = 'safesite.tasks.sendGridtask2'
|
||||
pobj.interval = schobj.interval if schobj.interval else None
|
||||
pobj.crontab = schobj.crontab if schobj.crontab else None
|
||||
pobj.start_time = data['start_time'] if ('start_time' in data and data['start_time']) else None
|
||||
pobj.save()
|
||||
obj = GridTaskSet()
|
||||
obj.riskact = RiskAct.objects.get(id=data['riskact'])
|
||||
obj.user = User.objects.get(userid=data['user'])
|
||||
obj.gridlevel = Dickey.objects.get(dickeyid=data['gridlevel'])
|
||||
obj.note = data['note'] if 'note' in data and data['note'] else None
|
||||
obj.expire = data['expire'] if 'expire' in data and data['expire'] else None
|
||||
obj.periodictask = pobj
|
||||
obj.myschedule = schobj
|
||||
obj.save()
|
||||
pobj.kwargs=json.dumps({'gridtaskset':obj.id})
|
||||
pobj.save()
|
||||
return JsonResponse({'code': 1})
|
||||
elif a == 'detail':
|
||||
objs = GridTaskSet.objects.filter(id=req.GET.get('id'))
|
||||
objdata = objs.values('id', 'gridlevel__dickeyname', 'user__name','user__userid','gridlevel__dickeyid',
|
||||
'schedule', 'note', 'start_task', 'is_paused', 'count')[0]
|
||||
objdata = objs.values('id', 'gridlevel__dickeyname', 'user__name','user__userid','gridlevel__dickeyid','myschedule__id',
|
||||
'myschedule__name', 'note', 'periodictask__start_time')[0]
|
||||
xx = {'code':1, 'data':objdata}
|
||||
return HttpResponse(json.dumps(xx, cls=MyEncoder), content_type="application/json")
|
||||
elif a == 'del':
|
||||
id = req.GET.get('id')
|
||||
obj = GridTaskSet.objects.get(id=id)
|
||||
obj.delete()
|
||||
obj.periodictask.delete()
|
||||
return JsonResponse({"code": 1})
|
||||
elif a == 'edit':
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
|
@ -7101,19 +7157,27 @@ def apigridtaskset(req):
|
|||
obj.user = User.objects.get(userid=data['user'])
|
||||
obj.gridlevel = Dickey.objects.get(dickeyid=data['gridlevel'])
|
||||
obj.note = data['note'] if 'note' in data and data['note'] else None
|
||||
obj.start_task = data['start_task']
|
||||
obj.schedule = data['schedule']
|
||||
obj.expire = data['expire'] if 'expire' in data and data['expire'] else None
|
||||
pobj = obj.periodictask
|
||||
if 'myschedule' in data and data['myschedule']:
|
||||
schobj = MySchedule.objects.get(id=data['myschedule'])
|
||||
pobj.interval = schobj.interval if schobj.interval else None
|
||||
pobj.crontab = schobj.crontab if schobj.crontab else None
|
||||
pobj.start_time = data['start_time'] if ('start_time' in data and data['start_time']) else None
|
||||
pobj.save()
|
||||
obj.myschedule = schobj
|
||||
obj.save()
|
||||
# from .tasks import shifttime
|
||||
# print(shifttime(10, 'seconds', datetime.now()))
|
||||
return JsonResponse({'code': 1})
|
||||
elif a == 'toggle':
|
||||
obj = GridTaskSet.objects.get(id=req.GET.get('id'))
|
||||
if obj.is_paused:
|
||||
obj.is_paused = False
|
||||
if obj.periodictask.enabled:
|
||||
obj.periodictask.enabled = False
|
||||
obj.periodictask.save()
|
||||
else:
|
||||
obj.is_paused = True
|
||||
obj.save()
|
||||
obj.periodictask.enabled = True
|
||||
obj.periodictask.save()
|
||||
return JsonResponse({'code': 1})
|
||||
|
||||
def apirisk(req):
|
||||
|
|
Loading…
Reference in New Issue