From d28b8c8ce7a3957097660d3cd26888a7506503e5 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 6 Sep 2020 09:42:38 +0800 Subject: [PATCH] gridtaskset --- .../migrations/0346_auto_20200905_1756.py | 44 ++++++++++++++ .../migrations/0347_auto_20200905_1836.py | 35 +++++++++++ safesite/models.py | 49 ++++++--------- .../{gridmanage.html => gridtaskset.html} | 60 ++++++++++--------- safesite/templates/gridtasksetadd.html | 58 ++++++++++++++++++ safesite/templates/gridtasksetedit.html | 58 ++++++++++++++++++ safesite/urls.py | 5 +- safesite/views.py | 27 +++++++-- safesite/viewsdrf.py | 2 +- 9 files changed, 273 insertions(+), 65 deletions(-) create mode 100644 safesite/migrations/0346_auto_20200905_1756.py create mode 100644 safesite/migrations/0347_auto_20200905_1836.py rename safesite/templates/{gridmanage.html => gridtaskset.html} (70%) create mode 100644 safesite/templates/gridtasksetadd.html create mode 100644 safesite/templates/gridtasksetedit.html diff --git a/safesite/migrations/0346_auto_20200905_1756.py b/safesite/migrations/0346_auto_20200905_1756.py new file mode 100644 index 00000000..0df19653 --- /dev/null +++ b/safesite/migrations/0346_auto_20200905_1756.py @@ -0,0 +1,44 @@ +# Generated by Django 2.2.8 on 2020-09-05 17:56 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0345_auto_20200830_2243'), + ] + + operations = [ + # migrations.RemoveField( + # model_name='companyinfo', + # name='liaison_fax', + # ), + migrations.AddField( + model_name='riskacttask', + name='tasknote', + field=models.TextField(blank=True, null=True, verbose_name='任务备注'), + ), + migrations.CreateModel( + name='GridTaskSet', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('task_schedule', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True, verbose_name='定时配置')), + ('note', models.TextField(null=True, verbose_name='检查备注')), + ('start_run', models.DateTimeField(blank=True, null=True, verbose_name='开始执行时间')), + ('last_run', models.DateTimeField(blank=True, null=True, verbose_name='最后执行时间')), + ('is_paused', models.BooleanField(default=True, verbose_name='是否暂停派发')), + ('count', models.IntegerField(default=0, verbose_name='任务派发次数')), + ('gridlevel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Dickey', verbose_name='网格化层级')), + ('riskact', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='gridtaskset_riskact', to='safesite.RiskAct')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='执行人')), + ], + ), + migrations.AddField( + model_name='riskacttask', + name='taskset', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='safesite.GridTaskSet', verbose_name='由哪个设置派发'), + ), + ] diff --git a/safesite/migrations/0347_auto_20200905_1836.py b/safesite/migrations/0347_auto_20200905_1836.py new file mode 100644 index 00000000..d8cb05a2 --- /dev/null +++ b/safesite/migrations/0347_auto_20200905_1836.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2.8 on 2020-09-05 18:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0346_auto_20200905_1756'), + ] + + operations = [ + # migrations.RemoveField( + # model_name='companyinfo', + # name='liaison_fax', + # ), + migrations.RemoveField( + model_name='gridtaskset', + name='last_run', + ), + migrations.RemoveField( + model_name='gridtaskset', + name='start_run', + ), + migrations.AddField( + model_name='gridtaskset', + name='last_send', + field=models.DateTimeField(blank=True, null=True, verbose_name='最后派发时间'), + ), + migrations.AddField( + model_name='gridtaskset', + name='start_send', + field=models.DateTimeField(blank=True, null=True, verbose_name='开始派发时间'), + ), + ] diff --git a/safesite/models.py b/safesite/models.py index a339007c..a445ce8c 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -1042,7 +1042,21 @@ class EdulessonWatch(models.Model): # 在线视频观看情况表 submittime = models.DateTimeField(default=timezone.now) -class RiskActTask(models.Model): # 风险点排查清单(任务) +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='执行人') + task_schedule = JSONField('定时配置',null=True, blank=True) + note = models.TextField('检查备注', null=True) + start_send = models.DateTimeField('开始派发时间', null=True, blank=True) + last_send = models.DateTimeField('最后派发时间', null=True, blank=True) + is_paused = models.BooleanField(default=True, verbose_name='是否暂停派发') + count = models.IntegerField('任务派发次数', default=0) + +class RiskActTask(models.Model): # 风险点排查执行记录 id = models.AutoField(primary_key=True) riskact = models.ForeignKey( RiskAct, on_delete=models.CASCADE, null=True, blank=True) @@ -1053,38 +1067,11 @@ class RiskActTask(models.Model): # 风险点排查清单(任务) taskexpire = models.DateTimeField(null=True, blank=True) usable = models.IntegerField(default=1) # 1是可用,2是变更计划,0是不可用 type = models.IntegerField(default=1) # 1是计划内,2是计划外 - note = models.TextField(null=True, blank=True) # 备注 + note = models.TextField(null=True, blank=True) # 检查备注 state = models.IntegerField(default=1) # 1是正常 istask = models.IntegerField(default=0) # 是否是任务 - -class GridTaskSet(models.Model): - """ - 网格化管理任务制定 - """ - tasktype_choices = ( - (1, '8h'), - (2, '24h'), - (3, '7day'), - (4, '1month'), - (5, '1year') - ) - 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='执行人') - tasktype = models.IntegerField(default=1, choices=tasktype_choices) - note = models.TextField('检查备注', null=True) - is_paused = models.BooleanField(default=True, verbose_name='是否暂停派发') - - - -class GridCheckRecord(models.Model): - """ - 网格化排查记录 - """ - riskact = models.ForeignKey(RiskAct, on_delete=models.CASCADE, related_name='gridcheckrecord_riskact') - - - + tasknote = models.TextField('任务备注', null=True, blank=True) + taskset = models.ForeignKey(GridTaskSet, null=True, blank=True, verbose_name='由哪个设置派发', on_delete=models.SET_NULL) class Risktask(models.Model): # 风险排查任务清单 id = models.AutoField(primary_key=True) diff --git a/safesite/templates/gridmanage.html b/safesite/templates/gridtaskset.html similarity index 70% rename from safesite/templates/gridmanage.html rename to safesite/templates/gridtaskset.html index f9082d6a..b3b414fb 100644 --- a/safesite/templates/gridmanage.html +++ b/safesite/templates/gridtaskset.html @@ -1,5 +1,5 @@
-
+
{% load myfilter %} @@ -25,22 +25,22 @@
-
- {% if request|has_permission:'b_risk_add' %} - + {% if request|has_permission:'b_gridtaskset_add' %} + 新增 {% endif %} - {% if request|has_permission:'b_risk_change' %} - 编辑 {% endif %} - {% if request|has_permission:'b_risk_del' %} - 删除 {% endif %}
-
+
@@ -84,25 +84,24 @@ //{ field: 'group__groupname', title: '岗位', width: 100 }, ]], onSelect: function (index, data) { - $('#risktable').datagrid({url:'api/risk?a=listall&riskact='+data.id}) + $('#girdtasksettable').datagrid({url:'api/gridtaskset/?a=listall&riskact='+data.id}) } }) - $('#risktable').datagrid({ - url: 'api/risk?a=listall', + $('#girdtasksettable').datagrid({ + url: 'api/gridtaskset/?a=listall', rownumbers: true, singleSelect: true, striped: true, method: 'get', - toolbar: '#riskbar', + toolbar: '#gridtasksetbar', pagination: 'true', pageSize: 20, columns: [[ { field: 'id', title: 'ID', hidden: true }, - { field: 'step', title: '项目/步骤', width: 100 }, - { field: 'hazard', title: '危害因素', width: 100 }, - { field: 'result', title: '可能后果', width: 100 }, - { field: 'level', title: '风险等级', width: 80 , styler: function (value, row, index) { + { field: 'gridlevel', title: '网格层级', width: 100 }, + { field: 'user__name', title: '执行人', width: 100 }, + { field: 'task_schedule', title: '任务周期', width: 80 , styler: function (value, row, index) { switch (value) { case '低风险': return 'background-color:blue;color:white'; break; case '一般风险': return 'background-color:yellow;'; break; @@ -110,18 +109,23 @@ case '重大风险': return 'background-color:red;color:white'; break; } }}, - { field: 'measure1', title: '工程技术', width: 100 }, - { field: 'measure2', title: '管理措施', width: 100 }, - { field: 'measure3', title: '培训教育', width: 100 }, - { field: 'measure4', title: '个体防护', width: 100 }, - { field: 'measure5', title: '应急处理', width: 100 }, - { field: 'riskl', title: 'L', width: 50 }, - { field: 'riske', title: 'E', width: 50 }, - { field: 'riskc', title: 'C', width: 50 }, - { field: 'riskd', title: 'D', width: 50 }, - + { field: 'start_send', title: '初次派发时间', width: 100 }, + { field: 'last_send', title: '最后派发时间', width: 100 }, + { field: 'is_paused', title: '当前状态', width: 100 }, + { field: 'count', title: '已派发次数', width: 100 }, ]], }); - + function addgridtaskset(){ + opendg('新增','html/gridtaskset/add/') + } + function editgridtaskset(){ + var row = $('#girdtasksettable').datagrid('getSelected'); + if (row) { + opendg('编辑','html/gridtaskset/edit/' + row.id) + } + else { + $.messager.alert('提示', '请先选择一个任务配置!'); + } + } \ No newline at end of file diff --git a/safesite/templates/gridtasksetadd.html b/safesite/templates/gridtasksetadd.html new file mode 100644 index 00000000..38ae5ac9 --- /dev/null +++ b/safesite/templates/gridtasksetadd.html @@ -0,0 +1,58 @@ +
+
+
+ 保存 + 取消 +
+
+
+
+
+ +
+
+ +
+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/safesite/templates/gridtasksetedit.html b/safesite/templates/gridtasksetedit.html new file mode 100644 index 00000000..f981c3bb --- /dev/null +++ b/safesite/templates/gridtasksetedit.html @@ -0,0 +1,58 @@ +
+
+
+ 保存 + 取消 +
+
+
+
+
+ +
+
+ +
+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/safesite/urls.py b/safesite/urls.py index 739c5596..d46e46e3 100644 --- a/safesite/urls.py +++ b/safesite/urls.py @@ -82,7 +82,9 @@ urlpatterns = [ path('html/inspect/detail/', views.inspectdetail), path('html/inspectitem/detail/', views.inspectitemdetail), path('html/risk//',views.risk), - path('html/gridmanage/', views.gridmanage), + path('html/gridtaskset/', views.gridtaskset), + path('html/gridtaskset/add/', views.gridtasksetadd), + path('html/gridtaskset/edit//',views.gridtasksetedit), path('html/riskact/add//',views.riskactadd), path('html/riskact/edit//',views.riskactedit), path('html/risk/add//',views.riskadd), @@ -195,6 +197,7 @@ urlpatterns = [ path('api/equipmentfig',views.equipmentfig),#设备统计图 path('api/equipmentcheckform/',viewsdrf.EquipmentCheckFormDetailView.as_view()), path('api/equipmentcheckform',viewsdrf.EquipmentCheckFormAPIView.as_view()), + path('api/gridtaskset/',views.apigridtaskset), path('api/examtestrate',views.apiexamtestrate), diff --git a/safesite/views.py b/safesite/views.py index e8797f0d..f30d8b05 100644 --- a/safesite/views.py +++ b/safesite/views.py @@ -3,7 +3,7 @@ from captcha.helpers import captcha_image_url from captcha.models import CaptchaStore from django.shortcuts import render, redirect from django.http import HttpResponse, HttpResponseRedirect, JsonResponse -from .models import User, Trouble, Dickey, Partment, Dicclass, Train, Drill, TroubleAccess, Group, Yjyc,Checktable, Trainuser, Drilluser, Yjsetup, Menu, Observe, Observeto, Unsafes, Miss, Socertificate, Userprofile, Suggest, Notice, Noticeto, Operation, Operzyry, Fxcs, Operationspjd, Operspxq, Question, ExamPaper, ExamTest, ExamPaperDetail, ExamTestDetail, Questioncat, Safecert, Map, Area, Missto, Suggestflow, Equipment, Inspect, Risk, RiskAct, Risktask, Riskcheck, Report, RiskActTask, Riskcheck2,Resbility,Operproce,Readerblility,ReaderOperproce,Role,EquipmentCheckForm,EquipmentCheckItem,Checkproject,Checktask,Checkjob,InspectItem +from .models import * from django.template import RequestContext from django.views.decorators.csrf import csrf_exempt from django.core import serializers @@ -207,9 +207,15 @@ def riskadd(req, id): def risk(req, kind): return render(req, 'risk.html', {'kind': kind}) -def gridmanage(req): - return render(req, 'gridmanage.html') - +def gridtaskset(req): + return render(req, 'gridtaskset.html') + +def gridtasksetadd(req): + return render(req, 'gridtasksetadd.html') + +def gridtasksetedit(req, id): + return render(req, 'gridtasksetedit.html', {'id': id}) + def inspect(req): return render(req, 'inspect.html') @@ -7053,6 +7059,19 @@ def apiriskact(req): riskact=obj, taskadd=tasktime, taskexpire=tasktime + timedelta(days=7), istask=1) return JsonResponse({"code": 1}) +def apigridtaskset(req): + a = req.GET.get('a') + userid = req.session['userid'] + companyid = getcompany(userid) + if a == 'listall': + objs = GridTaskSet.objects.filter(riskact__usecomp__partid=companyid) + if req.GET.get('riskact', None): + objs = objs.filter(riskact__id=req.GET.get('riskact')) + total = objs.count() + startnum, endnum = fenye(req) + objs = objs.order_by('-pk')[startnum:endnum].values('id', 'gridlevel', 'user__name', + 'task_schedule', 'note', 'start_send', 'last_send', 'is_paused', 'count') + return HttpResponse(transjson(total, objs), content_type="application/json") def apirisk(req): a = req.GET.get('a') diff --git a/safesite/viewsdrf.py b/safesite/viewsdrf.py index 81a7c02a..f99689e8 100644 --- a/safesite/viewsdrf.py +++ b/safesite/viewsdrf.py @@ -1,6 +1,7 @@ from .models import * from .serializers import * from rest_framework.views import APIView +from rest_framework.viewsets import ModelViewSet from rest_framework.response import Response from rest_framework import generics @@ -65,4 +66,3 @@ class EquipmentCheckFormAPIView(APIView): class EquipmentCheckFormDetailView(generics.RetrieveUpdateDestroyAPIView): queryset = EquipmentCheckForm.objects.all() serializer_class = EquipmentCheckFormSerializers -