From a0b873510b124c52dd8de2bef567ecdbee8f0ab8 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 8 Sep 2020 18:23:54 +0800 Subject: [PATCH] task dd --- celerybeat.pid | 2 +- mysite/celery.py | 20 +-- mysite/settings.py | 8 +- safesite/admin.py | 3 +- .../migrations/0351_auto_20200908_1119.py | 50 +++++++ .../migrations/0352_auto_20200908_1151.py | 27 ++++ .../migrations/0353_auto_20200908_1311.py | 35 +++++ .../migrations/0354_auto_20200908_1407.py | 27 ++++ .../0355_remove_companyinfo_liaison_fax.py | 17 +++ .../migrations/0356_auto_20200908_1646.py | 27 ++++ safesite/models.py | 19 ++- safesite/tasks.py | 26 ++-- safesite/templates/gridtaskset.html | 34 ++--- safesite/templates/gridtasksetadd.html | 23 ++- safesite/templates/gridtasksetedit.html | 36 +++-- safesite/templates/scheduleset.html | 80 +++++++++++ safesite/templates/schedulesetadd.html | 97 +++++++++++++ safesite/templates/schedulesetedit.html | 131 ++++++++++++++++++ safesite/urls.py | 5 + safesite/views.py | 100 ++++++++++--- 20 files changed, 680 insertions(+), 87 deletions(-) create mode 100644 safesite/migrations/0351_auto_20200908_1119.py create mode 100644 safesite/migrations/0352_auto_20200908_1151.py create mode 100644 safesite/migrations/0353_auto_20200908_1311.py create mode 100644 safesite/migrations/0354_auto_20200908_1407.py create mode 100644 safesite/migrations/0355_remove_companyinfo_liaison_fax.py create mode 100644 safesite/migrations/0356_auto_20200908_1646.py create mode 100644 safesite/templates/scheduleset.html create mode 100644 safesite/templates/schedulesetadd.html create mode 100644 safesite/templates/schedulesetedit.html diff --git a/celerybeat.pid b/celerybeat.pid index ec65132f..ed638e47 100644 --- a/celerybeat.pid +++ b/celerybeat.pid @@ -1 +1 @@ -2664 +11768 diff --git a/mysite/celery.py b/mysite/celery.py index 922ff46c..b6d72001 100644 --- a/mysite/celery.py +++ b/mysite/celery.py @@ -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), diff --git a/mysite/settings.py b/mysite/settings.py index 44417c50..231f44f3 100644 --- a/mysite/settings.py +++ b/mysite/settings.py @@ -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 diff --git a/safesite/admin.py b/safesite/admin.py index 8f8beaad..5eee4138 100644 --- a/safesite/admin.py +++ b/safesite/admin.py @@ -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') diff --git a/safesite/migrations/0351_auto_20200908_1119.py b/safesite/migrations/0351_auto_20200908_1119.py new file mode 100644 index 00000000..7004ccec --- /dev/null +++ b/safesite/migrations/0351_auto_20200908_1119.py @@ -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')), + ], + ), + ] diff --git a/safesite/migrations/0352_auto_20200908_1151.py b/safesite/migrations/0352_auto_20200908_1151.py new file mode 100644 index 00000000..4117e4de --- /dev/null +++ b/safesite/migrations/0352_auto_20200908_1151.py @@ -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'), + ), + ] diff --git a/safesite/migrations/0353_auto_20200908_1311.py b/safesite/migrations/0353_auto_20200908_1311.py new file mode 100644 index 00000000..4f38d640 --- /dev/null +++ b/safesite/migrations/0353_auto_20200908_1311.py @@ -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, + ), + ] diff --git a/safesite/migrations/0354_auto_20200908_1407.py b/safesite/migrations/0354_auto_20200908_1407.py new file mode 100644 index 00000000..70cd77db --- /dev/null +++ b/safesite/migrations/0354_auto_20200908_1407.py @@ -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='派发有效期'), + ), + ] diff --git a/safesite/migrations/0355_remove_companyinfo_liaison_fax.py b/safesite/migrations/0355_remove_companyinfo_liaison_fax.py new file mode 100644 index 00000000..f34d9a0f --- /dev/null +++ b/safesite/migrations/0355_remove_companyinfo_liaison_fax.py @@ -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', + # ), + ] diff --git a/safesite/migrations/0356_auto_20200908_1646.py b/safesite/migrations/0356_auto_20200908_1646.py new file mode 100644 index 00000000..e7caf1b2 --- /dev/null +++ b/safesite/migrations/0356_auto_20200908_1646.py @@ -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='类型'), + ), + ] diff --git a/safesite/models.py b/safesite/models.py index 5de05aa7..c500042a 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -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) diff --git a/safesite/tasks.py b/safesite/tasks.py index b064d58c..dc82a0b1 100644 --- a/safesite/tasks.py +++ b/safesite/tasks.py @@ -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() diff --git a/safesite/templates/gridtaskset.html b/safesite/templates/gridtaskset.html index c0e1b3d6..643d9f05 100644 --- a/safesite/templates/gridtaskset.html +++ b/safesite/templates/gridtaskset.html @@ -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) { diff --git a/safesite/templates/gridtasksetadd.html b/safesite/templates/gridtasksetadd.html index 805c1304..394cd873 100644 --- a/safesite/templates/gridtasksetadd.html +++ b/safesite/templates/gridtasksetadd.html @@ -25,12 +25,23 @@
- - 开始派发时间 +
-
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/safesite/templates/schedulesetadd.html b/safesite/templates/schedulesetadd.html new file mode 100644 index 00000000..da0d11c3 --- /dev/null +++ b/safesite/templates/schedulesetadd.html @@ -0,0 +1,97 @@ +
+
+
+ 保存 + 取消 +
+
+
+
+
+ +
+
+ +
+
+ + 每隔 + + +
+
+
高级配置
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
\ No newline at end of file diff --git a/safesite/templates/schedulesetedit.html b/safesite/templates/schedulesetedit.html new file mode 100644 index 00000000..13e37a70 --- /dev/null +++ b/safesite/templates/schedulesetedit.html @@ -0,0 +1,131 @@ +
+
+
+ 保存 + 取消 +
+
+
+
+
+ +
+
+ + + 选择 +
+
+ +
+
+ + + +
+
+ +
+
+ +
+ +
+
+ +
\ No newline at end of file diff --git a/safesite/urls.py b/safesite/urls.py index 7535a3da..d88cfc4e 100644 --- a/safesite/urls.py +++ b/safesite/urls.py @@ -127,6 +127,10 @@ urlpatterns = [ path('html/checkdetail//',views.checkdetail),#任务分配详情 #html页面 + # 任务策略配置 + path('html/scheduleset/', views.scheduleset), + path('html/scheduleset/add/', views.schedulesetadd), + path('html/scheduleset/edit//',views.schedulesetedit), path('getuser', views.getuser), path('addyh', views.addyh), @@ -198,6 +202,7 @@ urlpatterns = [ path('api/equipmentcheckform/',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), diff --git a/safesite/views.py b/safesite/views.py index a08654a9..7dd8166a 100644 --- a/safesite/views.py +++ b/safesite/views.py @@ -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):