544 lines
21 KiB
Python
544 lines
21 KiB
Python
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 datetime import datetime,date
|
|
import base64
|
|
from django.conf import settings
|
|
import qrcode
|
|
import os
|
|
from django.contrib.auth.hashers import make_password
|
|
|
|
def makeqr(data):
|
|
upload_folder = 'media/qr_equipment'
|
|
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 makeqr_train(data):
|
|
upload_folder = 'media/qr_train'
|
|
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 makeqr_riskact(data):
|
|
upload_folder = 'media/qr_riskact'
|
|
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 makeqr_examtest(data):
|
|
upload_folder = 'media/qr_examtest'
|
|
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 makeqr_area(data):
|
|
upload_folder = 'media/qr_area'
|
|
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]
|
|
i = 4
|
|
user = User.objects.get(userid=userid)
|
|
qlist = ['A','B','C','D','E','F']
|
|
leveldict = {'低':1,'中':2,'高':3}
|
|
notinlist = []
|
|
while sheet['c'+str(i)].value!=None:
|
|
type = sheet['a'+str(i)].value.replace(' ', '')
|
|
cate = sheet['b'+str(i)].value.replace(' ', '')
|
|
title = sheet['c'+str(i)].value
|
|
answer = {}
|
|
if sheet['d'+str(i)].value:
|
|
answer['A'] = sheet['d'+str(i)].value
|
|
if sheet['e'+str(i)].value:
|
|
answer['B'] = sheet['e'+str(i)].value
|
|
if sheet['f'+str(i)].value:
|
|
answer['C'] = sheet['f'+str(i)].value
|
|
if sheet['g'+str(i)].value:
|
|
answer['D'] = sheet['g'+str(i)].value
|
|
if sheet['h'+str(i)].value:
|
|
answer['E'] = sheet['h'+str(i)].value
|
|
if sheet['i'+str(i)].value:
|
|
answer['F'] = sheet['i'+str(i)].value
|
|
right = sheet['j'+str(i)].value.replace(' ', '')
|
|
resolution = sheet['k'+str(i)].value
|
|
level = sheet['l'+str(i)].value
|
|
objs = Questioncat.objects.filter(usecomp__partid=1,name=cate)
|
|
if objs.exists():
|
|
cateobj = objs[0]
|
|
else:
|
|
objs = Questioncat.objects.filter(usecomp__partid=companyid,name=cate)
|
|
if objs.exists():
|
|
cateobj = objs[0]
|
|
else:
|
|
cateobj = Questioncat.objects.create(usecomp=Partment.objects.get(partid=companyid),name=cate)
|
|
print(cateobj)
|
|
if type == '单选':
|
|
if Question.objects.filter(type=1,title=title,right=right,deletemark=1).exists():
|
|
notinlist.append(i)
|
|
else:
|
|
if right in ['A','B','C','D','E','F']:
|
|
obj = Question()
|
|
obj.type = 1
|
|
obj.questioncat = cateobj
|
|
obj.title = title
|
|
obj.answer=answer
|
|
obj.right = right
|
|
obj.resolution = resolution if resolution else ''
|
|
if level in leveldict:
|
|
obj.level = leveldict[level]
|
|
else:
|
|
obj.level = 1
|
|
obj.usecoms = ','+companyid+','
|
|
obj.createuser = user
|
|
obj.save()
|
|
elif type == '多选':
|
|
right = list(right)
|
|
if Question.objects.filter(type=2,title=title,right=right,deletemark=1).exists():
|
|
notinlist.append(i)
|
|
else:
|
|
if [False for c in right if c not in qlist]:
|
|
pass
|
|
else:
|
|
obj = Question()
|
|
obj.type = 2
|
|
obj.questioncat = cateobj
|
|
obj.title = title
|
|
obj.answer=answer
|
|
obj.right = right
|
|
obj.resolution = resolution if resolution else ''
|
|
if level in leveldict:
|
|
obj.level = leveldict[level]
|
|
else:
|
|
obj.level = 1
|
|
obj.usecoms = ','+companyid+','
|
|
obj.createuser = user
|
|
obj.save()
|
|
elif type == '判断':
|
|
if right == 'A' or right == '对':
|
|
right = 'A'
|
|
else:
|
|
right = 'B'
|
|
if Question.objects.filter(type=3,title=title,right=right,deletemark=1).exists():
|
|
notinlist.append(i)
|
|
else:
|
|
obj = Question()
|
|
obj.type = 3
|
|
obj.questioncat = cateobj
|
|
obj.title = title
|
|
obj.answer={'A':'对','B':'错'}
|
|
obj.right = right
|
|
obj.resolution = resolution if resolution else ''
|
|
if level in leveldict:
|
|
obj.level = leveldict[level]
|
|
else:
|
|
obj.level = 1
|
|
obj.usecoms = ','+companyid+','
|
|
obj.createuser = user
|
|
obj.save()
|
|
i = i +1
|
|
print(notinlist)
|
|
return notinlist
|
|
|
|
|
|
|
|
|
|
def drequipments(companyid,path):
|
|
wb = load_workbook(path)
|
|
sheet = wb.worksheets[0]
|
|
numdict = {}
|
|
numsdict = {}
|
|
nums = Equipment.objects.filter(usecomp__partid=companyid)
|
|
for i in nums:
|
|
numdict[i.num]=i
|
|
i=4
|
|
catedict = {'锅炉':352,'塔类':353,'反应器类':354,'储罐及容器类':355,'冷换设备类':356,'通用机械类':357,'动力类':358,'化工机械类':359,'起重运输类':360,'其他设备类':361,'其它设备类':361}
|
|
while sheet['c'+str(i)].value!=None:
|
|
area = sheet['a'+str(i)].value
|
|
cate = sheet['b'+str(i)].value
|
|
name = sheet['d'+str(i)].value
|
|
type = sheet['e'+str(i)].value
|
|
oem = sheet['f'+str(i)].value
|
|
fnum = sheet['g'+str(i)].value
|
|
fdate = sheet['h'+str(i)].value
|
|
udate = sheet['i'+str(i)].value
|
|
place = sheet['j'+str(i)].value
|
|
parameter = sheet['k'+str(i)].value
|
|
partment = sheet['n'+str(i)].value
|
|
user = sheet['o'+str(i)].value
|
|
note = sheet['p'+str(i)].value
|
|
num = sheet['c'+str(i)].value
|
|
iskey = sheet['m'+str(i)].value
|
|
istz = sheet['l'+str(i)].value
|
|
if num:
|
|
if num not in numdict:
|
|
a = Equipment()
|
|
a.num = num
|
|
a.name = name
|
|
a.type = type
|
|
a.oem = oem
|
|
a.fnum = fnum
|
|
a.place = place
|
|
a.note = note
|
|
a.parameter = parameter
|
|
if iskey:
|
|
iskey = iskey.replace(' ', '')
|
|
if iskey=='是':
|
|
a.iskey=1
|
|
if istz:
|
|
istz = istz.replace(' ', '')
|
|
if istz=='是':
|
|
a.istz=1
|
|
if fdate:
|
|
if isinstance(fdate,datetime):
|
|
a.fdate = fdate
|
|
else:
|
|
fdate = fdate.replace(' ','')
|
|
if '-' in fdate:
|
|
a.fdate = datetime.strptime(fdate,'%Y-%m-%d').date()
|
|
elif '.' in fdate:
|
|
a.fdate = datetime.strptime(fdate,'%Y.%m.%d').date()
|
|
elif '/' in fdate:
|
|
a.fdate = datetime.strptime(fdate,'%Y/%m/%d').date()
|
|
if udate:
|
|
if isinstance(udate,datetime):
|
|
a.udate = udate
|
|
else:
|
|
udate = udate.replace(' ','')
|
|
if '-' in udate:
|
|
a.udate = datetime.strptime(udate,'%Y-%m-%d').date()
|
|
elif '.' in udate:
|
|
a.udate = datetime.strptime(udate,'%Y.%m.%d').date()
|
|
elif '/' in udate:
|
|
a.udate = datetime.strptime(udate,'%Y/%m/%d').date()
|
|
if area:
|
|
area = area.replace(' ', '')
|
|
objs = Area.objects.filter(usecomp__partid=companyid,name=area)
|
|
if objs.exists():
|
|
a.area = objs[0]
|
|
if partment and user:
|
|
partment = partment.replace(' ', '')
|
|
user = user.replace(' ', '')
|
|
parts = Partment.objects.filter(partname=partment,partlink__contains=','+companyid+',')
|
|
if parts.exists():
|
|
a.zrbm = parts[0]
|
|
users = User.objects.filter(name=user,usecomp__partid=companyid)
|
|
if users.exists():
|
|
a.zrr = users[0]
|
|
if cate:
|
|
cate = cate.replace(' ', '')
|
|
if cate in catedict:
|
|
a.cate=Dickey.objects.get(dickeyid=catedict[cate])
|
|
a.usecomp=Partment.objects.get(partid=companyid)
|
|
a.save()
|
|
a.qrcode = makeqr('https://safeyun.ctcshe.com/miniprogram/equipment?id='+str(a.id))
|
|
a.save()
|
|
numdict[num]=a
|
|
else:
|
|
numsdict[num]=name
|
|
i = i+1
|
|
return numsdict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def drusers(companyid,path):
|
|
wb = load_workbook(path)
|
|
sheet = wb.worksheets[0]
|
|
partdict = {}
|
|
# groupdict = {}
|
|
userdict = {}
|
|
parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门
|
|
for i in parts:
|
|
partdict[i.partname] = i.partid
|
|
# groups = Group.objects.filter(usecomp__partid=companyid)
|
|
# for i in groups:
|
|
# groupdict[i.groupname] = i.groupid
|
|
i = 4
|
|
while sheet['C'+str(i)].value !=None:
|
|
empid = sheet['A'+str(i)].value
|
|
if empid!=None and isinstance(empid,str):
|
|
empid = empid.replace(' ', '')
|
|
name = sheet['B'+str(i)].value
|
|
if name !=None:
|
|
name = name.replace(' ', '')
|
|
username = sheet['C'+str(i)].value
|
|
if isinstance(username,str):
|
|
username = username.replace(' ', '')
|
|
partname = sheet['D'+str(i)].value #部门
|
|
if partname != None:
|
|
partname = partname.replace(' ', '')
|
|
if partname not in partdict:
|
|
a = Partment()
|
|
a.parentid = Partment.objects.get(partid=companyid)
|
|
a.partname = partname
|
|
a.partlink = Partment.objects.get(partid=companyid).partlink + str(companyid) + ','
|
|
a.save()
|
|
partdict[partname] = a.partid
|
|
# groupname = sheet['E'+str(i)].value
|
|
# groupname = groupname.replace(' ', '') if groupname else None
|
|
# if groupname and groupname not in groupdict:
|
|
# obj = Group()
|
|
# obj.groupname = groupname
|
|
# obj.usecomp = Partment.objects.get(partid=companyid)
|
|
# obj.save()
|
|
# groupdict[groupname] = obj.groupid
|
|
if User.objects.filter(username = username).count() == 0:
|
|
a = User()
|
|
a.name = name
|
|
a.empid = empid
|
|
a.username = username
|
|
a.password = '0000'
|
|
a.epassword = make_password('0000')
|
|
a.ubelongpart = Partment.objects.get(partid=partdict[partname])
|
|
a.usecomp = Partment.objects.get(partid=companyid)
|
|
a.save()
|
|
Group.objects.get(usecomp__partid=companyid,grouptype=3).users.add(a) #赋权
|
|
# if groupname:
|
|
# Group.objects.get(groupid=groupdict[groupname]).users.add(a)
|
|
else:
|
|
userdict[username]=i
|
|
i = i + 1
|
|
return userdict
|
|
|
|
def drrisks(companyid,path):
|
|
wb = load_workbook(path)
|
|
sheet = wb.worksheets[0]
|
|
errorlist = []
|
|
i=5
|
|
while sheet['d'+str(i)].value!=None:
|
|
area = sheet['a'+str(i)].value.replace(' ', '')
|
|
place = sheet['b'+str(i)].value
|
|
type = sheet['c'+str(i)].value.replace(' ', '')
|
|
name = sheet['d'+str(i)].value
|
|
group = sheet['e'+str(i)].value
|
|
step = sheet['f'+str(i)].value
|
|
hazard = sheet['g'+str(i)].value
|
|
result = sheet['h'+str(i)].value
|
|
measure1 = sheet['i'+str(i)].value
|
|
measure2 = sheet['j'+str(i)].value
|
|
measure3 = sheet['k'+str(i)].value
|
|
measure4 = sheet['l'+str(i)].value
|
|
measure5 = sheet['m'+str(i)].value
|
|
gkcj = sheet['n'+str(i)].value
|
|
zrbm = sheet['o'+str(i)].value
|
|
zrr = sheet['p'+str(i)].value
|
|
riskl = sheet['q'+str(i)].value
|
|
riske = sheet['r'+str(i)].value
|
|
riskc = sheet['s'+str(i)].value
|
|
step = step if step else None
|
|
hazard = hazard if hazard else None
|
|
result = result if result else None
|
|
measure1 = measure1 if measure1 else None
|
|
measure2 = measure2 if measure2 else None
|
|
measure3 = measure3 if measure2 else None
|
|
measure4 = measure4 if measure2 else None
|
|
measure5 = measure5 if measure2 else None
|
|
gkcj = gkcj if gkcj else None
|
|
riskl = float(riskl)
|
|
riske = float(riske)
|
|
riskc = float(riskc)
|
|
riskd = riskl*riske*riskc
|
|
level = ''
|
|
if area and type and name:
|
|
a = Risk()
|
|
areas = Area.objects.filter(name=area,usecomp__partid=companyid)
|
|
group = group.replace(' ','')
|
|
groups = Group.objects.filter(groupname=group,usecomp__partid=companyid)
|
|
if area and areas.exists():
|
|
riskacts = RiskAct.objects.filter(area=areas[0],name=name,usecomp__partid=companyid)
|
|
if riskacts.exists():
|
|
riskact = riskacts[0]
|
|
risks = Risk.objects.filter(riskact=riskact,step=step)
|
|
if risks.exists():
|
|
a = risks[0]
|
|
else:
|
|
a = Risk()
|
|
a.riskact = riskact
|
|
else:
|
|
obj = RiskAct()
|
|
obj.area = areas[0]
|
|
obj.place = place
|
|
if type == '设备设施类':
|
|
obj.type = Dickey.objects.get(dickeyid=396)
|
|
elif type == '作业活动类':
|
|
obj.type = Dickey.objects.get(dickeyid=397)
|
|
obj.name=name
|
|
obj.usecomp=Partment.objects.get(partid=companyid)
|
|
obj.gkcj=gkcj
|
|
if groups.exists():
|
|
obj.group = groups[0]
|
|
else:
|
|
g = Group()
|
|
g.groupname = group
|
|
g.usecomp = Partment.objects.get(partid=companyid)
|
|
g.save()
|
|
obj.group = g
|
|
if zrbm and zrr:
|
|
zrbm = zrbm.replace(' ', '')
|
|
zrr = zrr.replace(' ', '')
|
|
parts = Partment.objects.filter(partname=zrbm,partlink__contains=','+companyid+',')
|
|
if parts.exists():
|
|
obj.zrbm = parts[0]
|
|
users = User.objects.filter(name=zrr,usecomp__partid=companyid)
|
|
if users.exists():
|
|
obj.zrr = users[0]
|
|
obj.save()
|
|
obj.qrcode = makeqr_riskact('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(obj.id))
|
|
obj.save()
|
|
a = Risk()
|
|
a.riskact=obj
|
|
# else:
|
|
# riskacts = RiskAct.objects.filter(name=name,usecomp__partid=companyid)
|
|
# if riskacts.exists():
|
|
# riskact = riskacts[0]
|
|
# risks = Risk.objects.filter(riskact=riskact,step=step)
|
|
# if risks.exists():
|
|
# a = risks[0]
|
|
# else:
|
|
# a = Risk()
|
|
# a.riskact = riskact
|
|
# else:
|
|
# obj = RiskAct()
|
|
# obj.place = place
|
|
# if type == '设备设施类':
|
|
# obj.type = Dickey.objects.get(dickeyid=396)
|
|
# elif type == '作业活动类':
|
|
# obj.type = Dickey.objects.get(dickeyid=397)
|
|
# obj.name=name
|
|
# obj.usecomp=Partment.objects.get(partid=companyid)
|
|
# obj.gkcj=gkcj
|
|
# if groups.exists():
|
|
# obj.group = groups[0]
|
|
# else:
|
|
# g = Group()
|
|
# g.groupname = group
|
|
# g.usecomp = Partment.objects.get(partid=companyid)
|
|
# g.save()
|
|
# obj.group = g
|
|
# if zrbm and zrr:
|
|
# zrbm = zrbm.replace(' ', '')
|
|
# zrr = zrr.replace(' ', '')
|
|
# parts = Partment.objects.filter(partname=zrbm,partlink__contains=','+companyid+',')
|
|
# if parts.exists():
|
|
# obj.zrbm = parts[0]
|
|
# users = User.objects.filter(name=zrr,usecomp__partid=companyid)
|
|
# if users.exists():
|
|
# obj.zrr = users[0]
|
|
# obj.save()
|
|
# obj.qrcode = makeqr3('https://safeyun.ctcshe.com/miniprogram/riskact?id='+str(obj.id))
|
|
# obj.save()
|
|
# a = Risk()
|
|
# a.riskact=obj
|
|
if riskd>=320:
|
|
a.level='重大风险'
|
|
elif 320>riskd>=160:
|
|
a.level='较大风险'
|
|
elif 160>riskd>=70:
|
|
a.level='一般风险'
|
|
else:
|
|
a.level='低风险'
|
|
a.step = step
|
|
a.hazard = hazard
|
|
a.result = result
|
|
a.measure1 = measure1
|
|
a.measure2 = measure2
|
|
a.measure3 = measure3
|
|
a.measure4 = measure4
|
|
a.measure5 = measure5
|
|
a.riskl = riskl
|
|
a.riske = riske
|
|
a.riskc = riskc
|
|
a.riskd = riskd
|
|
a.usecomp=Partment.objects.get(partid=companyid)
|
|
a.save()
|
|
cal_riskact_level(a.riskact)
|
|
else:
|
|
errorlist.append(i)
|
|
i = i+1
|
|
return errorlist
|
|
|
|
def cal_riskact_level(riskact):
|
|
levellist = []
|
|
for i in Risk.objects.filter(riskact=riskact):
|
|
levellist.append(i.level)
|
|
if '重大风险' in levellist:
|
|
riskact.level = '重大风险'
|
|
riskact.save()
|
|
elif '较大风险' in levellist:
|
|
riskact.level = '较大风险'
|
|
riskact.save()
|
|
elif '一般风险' in levellist:
|
|
riskact.level = '一般风险'
|
|
riskact.save()
|
|
else:
|
|
riskact.level = '低风险'
|
|
riskact.save()
|
|
cal_area_risk_level(riskact.area)
|
|
|
|
def cal_area_risk_level(area):
|
|
levellist = []
|
|
objs = RiskAct.objects.filter(area=area,type__dickeyid=396)
|
|
if objs.exists:
|
|
for i in objs:#区域等级只按设备设施类来划分
|
|
levellist.append(i.level)
|
|
if '重大风险' in levellist:
|
|
area.risklevel = '重大风险'
|
|
area.save()
|
|
elif '较大风险' in levellist:
|
|
area.risklevel = '较大风险'
|
|
area.save()
|
|
elif '一般风险' in levellist:
|
|
area.risklevel = '一般风险'
|
|
area.save()
|
|
else:
|
|
area.risklevel = '低风险'
|
|
area.save()
|
|
else:
|
|
area.risklevel = None
|
|
area.save()
|
|
|
|
def is_float(str):
|
|
if str.count('.') == 1: #小数有且仅有一个小数点
|
|
left = str.split('.')[0] #小数点左边(整数位,可为正或负)
|
|
right = str.split('.')[1] #小数点右边(小数位,一定为正)
|
|
lright = '' #取整数位的绝对值(排除掉负号)
|
|
if str.count('-') == 1 and str[0] == '-': #如果整数位为负,则第一个元素一定是负号
|
|
lright = left.split('-')[1]
|
|
elif str.count('-') == 0:
|
|
lright = left
|
|
else:
|
|
#print('%s 不是小数'%str)
|
|
return False
|
|
if right.isdigit() and lright.isdigit(): #判断整数位的绝对值和小数位是否全部为数字
|
|
#print('%s 是小数'%str)
|
|
return True
|
|
else:
|
|
#print('%s 不是小数'%str)
|
|
return False
|
|
else:
|
|
#print('%s 不是小数'%str)
|
|
return False |