From 82c123ba76f9a3b56965293aa8c67c53a4a7cf9f Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sat, 4 Sep 2021 22:36:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=A3=80=E6=9F=A5=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E8=AF=A6=E6=83=85word?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- safesite/export.py | 28 ++++++++++- safesite/exportemp/checkjob.xlsx | Bin 0 -> 9369 bytes safesite/models.py | 16 ++++++- safesite/templates/checkjob.html | 3 +- safesite/templates/checkjobdetail.html | 6 ++- safesite/templates/checklistadd.html | 6 +-- safesite/views.py | 62 ++++++++++++++++++++++++- 7 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 safesite/exportemp/checkjob.xlsx diff --git a/safesite/export.py b/safesite/export.py index fe294ec4..15f93f08 100644 --- a/safesite/export.py +++ b/safesite/export.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,ExamPaper,ExamPaperDetail,Question,Operation,Operzyry,Operspxq,Fxcs,Suggest,Suggestflow,Trainuser,Miss +from .models import Checkjob, User,Trouble,Dickey,Partment,Dicclass,Train,Drill,TroubleAccess,Group,Yjyc,ExamPaper,ExamPaperDetail,Question,Operation,Operzyry,Operspxq,Fxcs,Suggest,Suggestflow,Trainuser,Miss from datetime import datetime,date import base64 import os @@ -735,6 +735,32 @@ def exportxlsx(a,objs,pic=1): res['Content-Disposition'] = 'attachment;filename='+filename+'.xlsx' res.write(output.getvalue()) return res + elif a == 'chekjob': + #查询数据 + wb = load_workbook(dirname + 'safesite/exportemp/checkjob.xlsx') + sheet = wb.active + for i, x in enumerate(objs): + num = str(i+3) + sheet['a'+num] = x.num + sheet['b'+num] = x.name + if x.cate: + sheet['c'+num] = x.cate.dickeyname + sheet['d'+num] = x.type + if x.area: + sheet['e'+num] = x.area.name + sheet['f'+num] = '正常' if x.state==1 else '异常' + sheet['g'+num] = 'https://safeyun.ctcshe.com/miniprogram/equipment?id='+str(x.id) + + #开始生成excel + sheet['b1'] = datetime.now().strftime('%Y%m%d%H%M%S') + filename = '安全检查整改记录' + output = BytesIO() + wb.save(output) + output.seek(0) + res = HttpResponse(content_type='application/vnd.ms-excel') + res['Content-Disposition'] = 'attachment;filename='+filename+'.xlsx' + res.write(output.getvalue()) + return res def exportyjdoc(vl): doc = DocxTemplate(dirname + "safesite/exportemp/fxbg.docx") diff --git a/safesite/exportemp/checkjob.xlsx b/safesite/exportemp/checkjob.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..01755d330c1a085f489930ba3e668a97268fcb0a GIT binary patch literal 9369 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 literal 0 HcmV?d00001 diff --git a/safesite/models.py b/safesite/models.py index 846c877d..0cbfc044 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -1360,6 +1360,14 @@ class Checktable(models.Model): #检查任务 class Checktask(models.Model): + tasktype_choice = ( + (1, '每天一次'), + (2, '每周一次'), + (3, '每月一次'), + (4, '每季度一次'), + (5, '每半年一次'), + (6, '每年一次'), + ) id=models.AutoField(primary_key=True)#主键 checktaskname=models.CharField(max_length=300)#任务名 checktype=models.ForeignKey(Checktable,on_delete=models.CASCADE)#关联检查表 @@ -1370,12 +1378,18 @@ class Checktask(models.Model): createdate = models.DateTimeField(default = timezone.now)#创建时间 usecomp = models.ForeignKey(Partment,related_name='taskscomp',on_delete=models.CASCADE,null=True,blank=True)#创建公司 deletemark = models.IntegerField(default=1)#是否删除 - tasktype = models.IntegerField(default=0)#任务执行频率(1每天,2每周,3每月,4每季度,5每半年,6每年) + tasktype = models.IntegerField(default=1, choices=tasktype_choice)#任务执行频率(1每天,2每周,3每月,4每季度,5每半年,6每年) userlist = models.TextField(default='')#检查人列表 zxstate = models.IntegerField(default=1)#1同时执行,2一个执行就执行 taskstate = models.IntegerField(default=1)#是否暂停,1运行,2暂停 class Checkjob(models.Model): + taskstate_choice = ( + (1, '正在整改中'), + (2, '已整改完成'), + (3, '任务关闭'), + (4, '待执行') + ) id=models.AutoField(primary_key=True)#主键 checktask=models.ForeignKey(Checktask,on_delete=models.CASCADE)#关联任务表 checkname=models.ForeignKey(User,related_name='jianchas',on_delete=models.CASCADE)#检查人员 diff --git a/safesite/templates/checkjob.html b/safesite/templates/checkjob.html index 87726acc..851b4aa0 100644 --- a/safesite/templates/checkjob.html +++ b/safesite/templates/checkjob.html @@ -138,7 +138,6 @@ }); function yhsearch() { var querydata = $('#searchyhff').serializeJSON(); - querydata['a'] = 'listsearch' $('#sdg_job').dialog('close') $('#jobtab').datagrid('load', querydata); @@ -146,7 +145,7 @@ function reset() { $('#searchyhff').form('clear') $('#jobtab').datagrid('options').queryParams = { - a:'listall' + a:'listall4' } $('#jobtab').datagrid('load'); diff --git a/safesite/templates/checkjobdetail.html b/safesite/templates/checkjobdetail.html index 589804fe..04772827 100644 --- a/safesite/templates/checkjobdetail.html +++ b/safesite/templates/checkjobdetail.html @@ -6,8 +6,9 @@ 验收 {{/if}} 关闭 + 导出 -
+
{{checktask__checktaskname}}
@@ -211,4 +212,7 @@ } }); } + function exportcheckjobword(e) { + $("#checkjobdiv").wordExport('安全检查整改记录'); + } \ No newline at end of file diff --git a/safesite/templates/checklistadd.html b/safesite/templates/checklistadd.html index 2a09256a..d25d2149 100644 --- a/safesite/templates/checklistadd.html +++ b/safesite/templates/checklistadd.html @@ -36,9 +36,9 @@ data-options="label:'初次检查',currentText:'今天',closeText:'关闭',showSeconds:false" required=true />
- +" data-options="label:'检查表'" required=true />
200: + res = HttpResponse() + res.write('数量超过200,请筛选后导出!') + return res + objs = objs.order_by('-starttime').values('id','checktask__checktaskname','jobstate', + 'starttime','endtime','yanshou','checkquestion','zguser__username','zgtime','yanshouren__name' + 'checktask__checktype__checktitle','checkname__username','checkname__name', + 'taskstate','checktask__checktime','createuser__username','createdate', 'taskstate__display', 'checktask__tasktype__display') + # res = exportxlsx('checkjob', objs) + # return res + + @apicheck_login def apioffence(req):