diff --git a/需求/安全培训系统建议.docx b/doc/安全培训系统建议.docx similarity index 100% rename from 需求/安全培训系统建议.docx rename to doc/安全培训系统建议.docx diff --git a/doc/安全清单使用文档.docx b/doc/安全清单使用文档.docx new file mode 100644 index 00000000..6236f31a Binary files /dev/null and b/doc/安全清单使用文档.docx differ diff --git a/需求/惠东需求.xlsx b/doc/惠东需求.xlsx similarity index 100% rename from 需求/惠东需求.xlsx rename to doc/惠东需求.xlsx diff --git a/需求/违章举报.docx b/doc/违章举报使用文档.docx similarity index 100% rename from 需求/违章举报.docx rename to doc/违章举报使用文档.docx diff --git a/doc/隐患跟踪模块使用文档.docx b/doc/隐患跟踪模块使用文档.docx new file mode 100644 index 00000000..687e546e Binary files /dev/null and b/doc/隐患跟踪模块使用文档.docx differ diff --git a/doc/风险管控模块使用文档.docx b/doc/风险管控模块使用文档.docx new file mode 100644 index 00000000..a672d5f7 Binary files /dev/null and b/doc/风险管控模块使用文档.docx differ diff --git a/safesite/daoru.py b/safesite/daoru.py index a352cc9b..22078d6e 100644 --- a/safesite/daoru.py +++ b/safesite/daoru.py @@ -2,7 +2,7 @@ from docxtpl import DocxTemplate, InlineImage from docx.shared import Mm, Inches, Pt from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image -from .models import User,Trouble,Dickey,Partment,Dicclass,Train,Drill,TroubleAccess,Group,Yjyc,Equipment,Area,RiskAct,Risk,Question,Questioncat +from .models import SafeItem, SafeList, User,Trouble,Dickey,Partment,Dicclass,Train,Drill,TroubleAccess,Group,Yjyc,Equipment,Area,RiskAct,Risk,Question,Questioncat from datetime import datetime,date import base64 from django.conf import settings @@ -56,6 +56,15 @@ def makeqr_area(data): img.save(filepath) return filepath +def makeqr_safelist(data): + upload_folder = 'media/qr_safelist' + if not os.path.exists(upload_folder): + os.mkdir(upload_folder) + img = qrcode.make(data=data) + filepath = os.path.join(upload_folder, data.split('=')[1]+'.png').replace('\\','/') + img.save(filepath) + return filepath + def drquestions(companyid,path,userid): wb = load_workbook(path) sheet = wb.worksheets[0] @@ -743,4 +752,49 @@ def is_float(str): return False else: #print('%s 不是小数'%str) - return False \ No newline at end of file + return False + +def drsafelist(companyid,path): + wb = load_workbook(path) + sheet = wb.worksheets[0] + # 验证文件内容 + if sheet['a5'].value != '项目类型': + return {'code':0,'msg':'项目类型列错误!'} + if sheet['b5'].value != '项目内容': + return {'code':0,'msg':'项目内容列错误!'} + safelist_name = sheet['b3'].value + user_name = sheet['b4'].value + if not safelist_name: + return {'code':0,'msg':'清单名称不能为空!'} + try: + user = User.objects.get(usecomp__partid=companyid, name=user_name) + except: + return {'code':0,'msg':'责任人不存在或重名!'} + try: + safelist = SafeList() + safelist.user = user + safelist.usecomp = user.usecomp + safelist.name = safelist_name + safelist.save() + safelist.qrcode = makeqr_safelist('https://safeyun.ctcshe.com/miniprogram/safelist?id='+str(safelist.id)) + safelist.save() + except: + return {'code':0,'msg':'创建清单失败!'} + i=6 + while sheet['a'+str(i)].value!=None: + type = sheet['a'+str(i)].value + name = sheet['b'+str(i)].value + if type == '职责': + type = 1 + elif type == '目标': + type = 2 + else: + return {'code':0,'msg': '第'+str(i)+ '行项目类型错误!'} + if name: + safeitem = SafeItem() + safeitem.name = name + safeitem.type = type + safeitem.safelist = safelist + safeitem.save() + i = i+1 + return {'code':1,'msg': '导入成功'} \ No newline at end of file diff --git a/safesite/migrations/0380_safefeedback_safeitem_safelist.py b/safesite/migrations/0380_safefeedback_safeitem_safelist.py new file mode 100644 index 00000000..3f6b4545 --- /dev/null +++ b/safesite/migrations/0380_safefeedback_safeitem_safelist.py @@ -0,0 +1,49 @@ +# Generated by Django 2.2.8 on 2021-05-23 08:41 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0379_auto_20210509_1916'), + ] + + operations = [ + migrations.CreateModel( + name='SafeList', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='清单名称')), + ('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), + ('updatetime', models.DateTimeField(auto_now=True)), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='责任人')), + ], + ), + migrations.CreateModel( + name='SafeItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(verbose_name='清单项目名称')), + ('type', models.IntegerField(default=1)), + ('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), + ('updatetime', models.DateTimeField(auto_now=True)), + ('worklist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.SafeList', verbose_name='所属清单')), + ], + ), + migrations.CreateModel( + name='SafeFeedBack', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('isdone', models.IntegerField(default=1)), + ('content', models.TextField(verbose_name='反馈内容')), + ('createtime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), + ('updatetime', models.DateTimeField(auto_now=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='反馈人')), + ('workitem', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='safesite.SafeItem')), + ], + ), + ] diff --git a/safesite/migrations/0381_auto_20210523_1033.py b/safesite/migrations/0381_auto_20210523_1033.py new file mode 100644 index 00000000..7bbc41ca --- /dev/null +++ b/safesite/migrations/0381_auto_20210523_1033.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.8 on 2021-05-23 10:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0380_safefeedback_safeitem_safelist'), + ] + + operations = [ + migrations.RenameField( + model_name='safeitem', + old_name='worklist', + new_name='safelist', + ), + ] diff --git a/safesite/migrations/0382_auto_20210523_1110.py b/safesite/migrations/0382_auto_20210523_1110.py new file mode 100644 index 00000000..944ab512 --- /dev/null +++ b/safesite/migrations/0382_auto_20210523_1110.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.8 on 2021-05-23 11:10 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0381_auto_20210523_1033'), + ] + + operations = [ + migrations.RenameField( + model_name='safefeedback', + old_name='workitem', + new_name='safeitem', + ), + ] diff --git a/safesite/migrations/0383_safelist_qrcode.py b/safesite/migrations/0383_safelist_qrcode.py new file mode 100644 index 00000000..a5c1aaae --- /dev/null +++ b/safesite/migrations/0383_safelist_qrcode.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.8 on 2021-05-23 13:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0382_auto_20210523_1110'), + ] + + operations = [ + migrations.AddField( + model_name='safelist', + name='qrcode', + field=models.CharField(blank=True, max_length=200, null=True), + ), + ] diff --git a/safesite/models.py b/safesite/models.py index 698b156c..e5ca6246 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -1383,4 +1383,38 @@ class Checkjob(models.Model): pmpeople=models.ManyToManyField(User,related_name='bcfr')#被处罚人员 content=models.TextField(null=True)#处罚内容 yhtp = models.TextField(null=True, blank=True) - zghtp = models.TextField(null=True, blank=True) \ No newline at end of file + zghtp = models.TextField(null=True, blank=True) + + +class SafeList(models.Model): + """ + 安全清单 + """ + user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name="责任人") + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name="所属公司") + name = models.CharField('清单名称', max_length=200) + qrcode = models.CharField(max_length=200, blank=True, null=True) # 清单二维码 + createtime = models.DateTimeField(default=timezone.now, verbose_name="创建时间") + updatetime = models.DateTimeField(auto_now=True) + + +class SafeItem(models.Model): + """ + 清单项目 + """ + safelist = models.ForeignKey(SafeList, on_delete=models.CASCADE, verbose_name="所属清单") + name = models.TextField('清单项目名称') + type = models.IntegerField(default=1) # 默认是责任,2是指标 ,需反馈 + createtime = models.DateTimeField(default=timezone.now, verbose_name="创建时间") + updatetime = models.DateTimeField(auto_now=True) + +class SafeFeedBack(models.Model): + """ + 清单反馈记录 + """ + user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="反馈人") + safeitem = models.ForeignKey(SafeItem, on_delete=models.SET_NULL, null=True, blank=True) + isdone = models.IntegerField(default=1) # 默认是完成,0是未完成 + content = models.TextField('反馈内容') + createtime = models.DateTimeField(default=timezone.now, verbose_name="创建时间") + updatetime = models.DateTimeField(auto_now=True) diff --git a/safesite/static/safesite/muban/safelist.xlsx b/safesite/static/safesite/muban/safelist.xlsx new file mode 100644 index 00000000..4e180f91 Binary files /dev/null and b/safesite/static/safesite/muban/safelist.xlsx differ diff --git a/safesite/templates/safefeedback.html b/safesite/templates/safefeedback.html new file mode 100644 index 00000000..59737501 --- /dev/null +++ b/safesite/templates/safefeedback.html @@ -0,0 +1,95 @@ +