gridtaskset
This commit is contained in:
parent
79361a5a8e
commit
d28b8c8ce7
|
|
@ -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='由哪个设置派发'),
|
||||
),
|
||||
]
|
||||
|
|
@ -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='开始派发时间'),
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<div class="easyui-layout" style="width:100%;height:100%;">
|
||||
<div data-options="region:'west',split:true,border:false,collapsible:false" style="width:50%;height:100%;" title="风险点">
|
||||
<div data-options="region:'west',split:true,border:false,collapsible:false" style="width:40%;height:100%;" title="风险点">
|
||||
<div id="riskactbar" style="padding:5px;height:auto">
|
||||
<div>
|
||||
{% load myfilter %}
|
||||
|
|
@ -25,22 +25,22 @@
|
|||
</div>
|
||||
<div data-options="region:'center',title:'网格化任务制定',split:true,border:false,collapsible:false" style="width:50%;height:100%;">
|
||||
|
||||
<div id="riskbar" style="padding:5px;height:auto">
|
||||
{% if request|has_permission:'b_risk_add' %}
|
||||
<a onclick="addrisk()" class="easyui-linkbutton"
|
||||
<div id="gridtasksetbar" style="padding:5px;height:auto">
|
||||
{% if request|has_permission:'b_gridtaskset_add' %}
|
||||
<a onclick="addgridtaskset()" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-plus',plain:true">新增</a>
|
||||
{% endif %}
|
||||
{% if request|has_permission:'b_risk_change' %}
|
||||
<a onclick="editrisk()" class="easyui-linkbutton"
|
||||
{% if request|has_permission:'b_gridtaskset_change' %}
|
||||
<a onclick="editgridtaskset()" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-pencil',plain:true">编辑</a>
|
||||
{% endif %}
|
||||
{% if request|has_permission:'b_risk_del' %}
|
||||
<a onclick="delrisk()" class="easyui-linkbutton"
|
||||
{% if request|has_permission:'b_gridtaskset_del' %}
|
||||
<a onclick="delgirdtaskset()" class="easyui-linkbutton"
|
||||
data-options="iconCls:'fa-trash',plain:true">删除</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
<table id="risktable" style="height:100%;width:auto"></table>
|
||||
<table id="girdtasksettable" style="height:100%;width:auto"></table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -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('提示', '请先选择一个任务配置!');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
<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="qyname" name="name" style="width:90%;"
|
||||
data-options="label:'区域名',required:true" class="easyui-textbox"></input>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<select id="qymap" name="map" style="width:90%" data-options="label:'所属地图'"
|
||||
editable="false" class="easyui-combotree">
|
||||
</select>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="qyorder" name="order" style="width:90%" data-options="label:'排序'" class="easyui-numberbox">
|
||||
</input>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$('#qymap').combotree({
|
||||
url: 'api/map?a=tree',
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
});
|
||||
function submitform() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'api/area?a=add',
|
||||
data: JSON.stringify($('#gridtasksetff').serializeJSON()),
|
||||
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) {
|
||||
$("#qylblist").datagrid('reload');
|
||||
$("#dd").dialog("close");
|
||||
} else { $.messager.alert('提示', '失败,区域名重复!'); }
|
||||
$('#submitb').linkbutton('enable');
|
||||
},
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
<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="qyff">
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="qyname" name="name" style="width:90%;"
|
||||
data-options="label:'区域名',required:true" class="easyui-textbox"></input>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<select id="qymap" name="map" style="width:90%" data-options="label:'所属地图'"
|
||||
editable="false" class="easyui-combotree">
|
||||
</select>
|
||||
</div>
|
||||
<div style="margin-bottom:10px">
|
||||
<input id="qyorder" name="order" style="width:90%" data-options="label:'排序'" class="easyui-numberbox">
|
||||
</input>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$('#qymap').combotree({
|
||||
url: 'api/map?a=tree',
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
});
|
||||
function submitform() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'api/area?a=add',
|
||||
data: JSON.stringify($('#qyff').serializeJSON()),
|
||||
datatype: "json",
|
||||
processData: false,
|
||||
contentType: "application/json;charset=utf-8",
|
||||
beforeSend: function () {
|
||||
var bo = $('#qyff').form('validate')
|
||||
if (bo == false) {
|
||||
return bo
|
||||
} else {
|
||||
$('#submitb').linkbutton('disable');
|
||||
}
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.code == 1) {
|
||||
$("#qylblist").datagrid('reload');
|
||||
$("#dd").dialog("close");
|
||||
} else { $.messager.alert('提示', '失败,区域名重复!'); }
|
||||
$('#submitb').linkbutton('enable');
|
||||
},
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
|
|
@ -82,7 +82,9 @@ urlpatterns = [
|
|||
path('html/inspect/detail/<int:id>', views.inspectdetail),
|
||||
path('html/inspectitem/detail/<int:id>', views.inspectitemdetail),
|
||||
path('html/risk/<int:kind>/',views.risk),
|
||||
path('html/gridmanage/', views.gridmanage),
|
||||
path('html/gridtaskset/', views.gridtaskset),
|
||||
path('html/gridtaskset/add/', views.gridtasksetadd),
|
||||
path('html/gridtaskset/edit/<int:id>/',views.gridtasksetedit),
|
||||
path('html/riskact/add/<int:kind>/',views.riskactadd),
|
||||
path('html/riskact/edit/<int:id>/',views.riskactedit),
|
||||
path('html/risk/add/<int:id>/',views.riskadd),
|
||||
|
|
@ -195,6 +197,7 @@ urlpatterns = [
|
|||
path('api/equipmentfig',views.equipmentfig),#设备统计图
|
||||
path('api/equipmentcheckform/<int:pk>',viewsdrf.EquipmentCheckFormDetailView.as_view()),
|
||||
path('api/equipmentcheckform',viewsdrf.EquipmentCheckFormAPIView.as_view()),
|
||||
path('api/gridtaskset/',views.apigridtaskset),
|
||||
|
||||
|
||||
path('api/examtestrate',views.apiexamtestrate),
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue