safesite/safesite/models.py

893 lines
49 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.db import models
import uuid
import django.utils.timezone as timezone
from django.contrib.postgres.fields import JSONField,ArrayField
import jwt
import datetime
# Create your models here.
class Partment(models.Model):
partid = models.AutoField(primary_key=True)
partname = models.CharField(max_length=30,default='生产部')
parentid = models.ForeignKey('self',blank=True,null=True,on_delete=models.CASCADE)
partlink = models.CharField(max_length=200,blank=True)#关系
deletemark=models.IntegerField(default='1')
creattime = models.DateTimeField(default = timezone.now)
iscompany = models.IntegerField(default=0)#是否是公司
aqy = models.CharField(max_length=1000,default=',')#安全员
bmzg = models.CharField(max_length=1000,default=',')#主管
bsq = models.CharField(max_length=1000,default=',')#授权者
position = JSONField('坐标',null=True,blank=True)
def __str__(self):
return self.partname
class Map(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
pic = models.CharField(max_length=1000,blank=True)
parent = models.ForeignKey('self',blank=True,null=True,on_delete=models.CASCADE)
link = models.CharField(max_length=200,blank=True)
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE)
default = models.IntegerField(default=0)
deletemark = models.IntegerField(default='1')
class Area(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
polygon = JSONField(null=True,blank=True)#坐标集
order = models.IntegerField(default=0)#排序
parent = models.ForeignKey('self',blank=True,null=True,on_delete=models.CASCADE)
link = models.CharField(max_length=200,blank=True)
belongmap = models.ForeignKey(Map, on_delete=models.CASCADE,related_name='belongmap',null=True,blank=True)
containmap = models.ForeignKey(Map, on_delete=models.CASCADE, related_name='containmap',null=True,blank=True)
deletemark = models.IntegerField(default='1')
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE)
risklevel = models.CharField(max_length=50,null=True,blank=True)#风险等级
qrcode = models.CharField(max_length=200,blank=True,null=True)#区域二维码
class User(models.Model):
userid = models.AutoField(primary_key=True)
empid = models.CharField(max_length=20,blank=True,null=True)#工号
username = models.CharField(max_length=30,unique=True)#账号
name = models.CharField(max_length=20)
password = models.CharField(max_length=30)
ubelongpart = models.ForeignKey(Partment,related_name='upart', on_delete=models.CASCADE)
openid=models.CharField(max_length=200,null=True,blank=True)#公众号openid
nickname=models.CharField(max_length=200,null=True,blank=True)#昵称
headimgurl=models.CharField(max_length=200,null=True,blank=True)#头像
issuper=models.IntegerField(default='0')#超管
deletemark=models.IntegerField(default='1')
mpopenid=models.CharField(max_length=200,null=True,blank=True) #小程序openid
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)#所属公司
def __str__(self):
return self.username
@property
def token(self):
return self.generate_jwt_token()
def generate_jwt_token(self):
token = jwt.encode({
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1),
'iat': datetime.datetime.utcnow(),
'data': {
'userid': self.userid
}
}, 'safeyun', algorithm='HS256')
return token.decode('utf-8')
class Userprofile(models.Model):
id = models.AutoField(primary_key=True)
user = models.OneToOneField(User,null=True,blank=True,on_delete=models.CASCADE)
realname = models.CharField(max_length=50)#真实姓名
gender = models.CharField(max_length=50)#性别
cardnum = models.CharField(max_length=50)#身份证号
class Dicclass(models.Model):
dicid= models.AutoField(primary_key=True)
dicname = models.CharField(max_length=30)#字典分类名
parentid = models.ForeignKey('self',blank=True,null=True, on_delete=models.CASCADE)
def __str__(self):
return self.dicname
class Dickey(models.Model):#字典
dickeyid= models.AutoField(primary_key=True)
dickeyname = models.CharField(max_length=200)
dicparent = models.ForeignKey(Dicclass, on_delete=models.CASCADE)
parent = models.ForeignKey('self',blank=True,null=True, on_delete=models.CASCADE)
usecomps = models.CharField(max_length=200,default=',1,')#所用公司
nousecomps = models.CharField(max_length=200,default='')#不用公司
detail = models.CharField(max_length=1000,default='')
deletemark=models.IntegerField(default='1')
creattime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
def __str__(self):
return self.dickeyname
class Trouble(models.Model):#隐患排查
ZT_CHOICES = (
(7,'措施/方案待提交'),
(5, '待复查'),
(1, '待评估'),
(3, '待整改'),
(6, '已归档'),
(2,'措施/方案待确认'),
(4,'待审核'),
(0,'待新增'),
)
SH_CHOICES = (
(1,'通过'),
(2, '审核未通过'),
(3, '复查未通过'),
(4, '已修改'),
(5,'评估未通过'),
(6,'未采纳'),
)
deletemark=models.IntegerField(default='1')
troubleid = models.AutoField(primary_key=True)
yhnum=models.CharField(max_length=100,null=True,blank=True)#编号
fxsj = models.DateTimeField(default = timezone.now)#发现时间
fxbm = models.ForeignKey(Partment,related_name='fxbm',on_delete=models.CASCADE,null=True,blank=True)
fxr = models.ForeignKey(User,related_name='fxr', on_delete=models.CASCADE,null=True,blank=True)
jclx = models.ForeignKey(Dickey,related_name='jclx', on_delete=models.CASCADE,null=True,blank=True)
yhdd = models.CharField(max_length=200,default='test')
yhdj = models.ForeignKey(Dickey,related_name='yhdj',on_delete=models.CASCADE,null=True,blank=True)
yhlx = models.ForeignKey(Dicclass,related_name='yhlx', on_delete=models.CASCADE,null=True,blank=True)
yhlb = models.ForeignKey(Dickey,related_name='yhlb',on_delete=models.CASCADE,null=True,blank=True)
yhpg = models.ForeignKey(Dickey,related_name='yhpg',on_delete=models.CASCADE,null=True,blank=True)
yhms = models.TextField(blank=True)
zgms = models.TextField(blank=True)
yyfx = models.TextField(blank=True)
zgcs = models.TextField(blank=True)
yhtp = models.CharField(max_length=1000,blank=True)
zghtp = models.CharField(max_length=1000,blank=True)
yhzt = models.IntegerField(choices = ZT_CHOICES,null=True,blank=True)
tbsj = models.DateTimeField(default = timezone.now)
zgbm = models.ForeignKey(Partment,related_name='zgbm',null=True,blank=True, on_delete=models.CASCADE)
zgr = models.ForeignKey(User,related_name='zgr',null=True,blank=True, on_delete=models.CASCADE)
xzr = models.CharField(max_length=200,default='')#协助人
zgqx = models.DateTimeField(null=True,blank=True)
zgsj = models.DateTimeField(null=True,blank=True)
pgsh=models.ManyToManyField(User,related_name='pgsh', through='TroubleAccess')#评估审核
material = models.CharField(max_length=1000,null=True,blank=True)
todouser = models.ForeignKey(User,related_name='todor',null=True,blank=True,on_delete=models.CASCADE)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
xgsj = models.DateTimeField(auto_now = True)
sybzt =models.IntegerField(choices = ZT_CHOICES,null=True,blank=True)
shresult = models.IntegerField(choices = SH_CHOICES,null=True,blank=True)
pgr = models.ForeignKey(User,related_name='pgr', on_delete=models.CASCADE,null=True,blank=True)#评估人
zpr = models.ForeignKey(User,related_name='zpr', on_delete=models.CASCADE,null=True,blank=True)#指派人
csqrr = models.ForeignKey(User,related_name='csqrr', on_delete=models.CASCADE,null=True,blank=True)#措施确认人
fcr = models.ForeignKey(User,related_name='fcr', on_delete=models.CASCADE,null=True,blank=True)#复查人
shr = models.ForeignKey(User,related_name='shr', on_delete=models.CASCADE,null=True,blank=True)#审核人
fcyj = models.TextField(null=True,blank=True)#复查意见
shyj= models.TextField(null=True,blank=True)#审核意见
pgyj= models.TextField(null=True,blank=True)#评估退回意见
yhqy = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True)#隐患区域
class TroubleAccess(models.Model):#隐患流程表
troubleid = models.ForeignKey(Trouble, on_delete=models.CASCADE)
clr = models.ForeignKey(User, on_delete=models.CASCADE)
action = models.CharField(max_length=100,null=True,blank=True)
opinion = models.CharField(max_length=500)
result = models.IntegerField(null=True,blank=True)
yhzt =models.IntegerField(default='1')
accesssj = models.DateTimeField(default = timezone.now)
class Drill(models.Model):#应急演练
drillid= models.AutoField(primary_key=True)
drillnum= models.CharField(max_length=100,default='1')
drillname = models.CharField(max_length=100)
drillplace=models.CharField(max_length=200)
starttime=models.DateTimeField(default = timezone.now)
participant=models.ManyToManyField(User,related_name='ylcjr',through='Drilluser')
submituser=models.ForeignKey(User,related_name='yltbr',default='1', on_delete=models.CASCADE)
submittime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,default='1', on_delete=models.CASCADE)
drilllevel=models.ForeignKey(Dicclass,related_name='yljb',default='1', on_delete=models.CASCADE)
drilltype=models.ForeignKey(Dickey,related_name='yllx',default='1', on_delete=models.CASCADE)
drillpart=models.ManyToManyField(Partment,related_name='ylbm',default='1')
drillcontent=models.ForeignKey(Dickey,related_name='ylnr',default='1', on_delete=models.CASCADE)
detailcontent=models.CharField(max_length=1000,null=True,blank=True)
commander=models.CharField(max_length=200,null=True,blank=True)
chief=models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
otherparticipant=models.CharField(max_length=1000,null=True,blank=True)
deletemark=models.IntegerField(default='1')
state=models.IntegerField(default='0')#默认未评估
participantnum=models.IntegerField(default='1',null=True,blank=True)
knownum=models.IntegerField(default='1',null=True,blank=True)
plan = models.CharField(max_length=1000,null=True,blank=True)
material = models.CharField(max_length=1000,null=True,blank=True)
class Drilluser(models.Model):#演练参加人表
drillid = models.ForeignKey(Drill, on_delete=models.CASCADE)
participant = models.ForeignKey(User, on_delete=models.CASCADE)
score = models.IntegerField(null=True,blank=True)
class Observe(models.Model):#行为观察
lookid = models.AutoField(primary_key=True)
looknum = models.CharField(max_length=100,default='1')
actname = models.CharField(max_length=100) #作业名称
lookplace = models.CharField(max_length=200)
looktime = models.DateTimeField(default = timezone.now)
looktime2 = models.DateTimeField(null=True,blank=True)
lookers = models.ManyToManyField(User,related_name='gcrs')#陪同人员
lookpart = models.ForeignKey(Partment,related_name='gcbm',on_delete=models.CASCADE) #观察部门
looker = models.ForeignKey(User,related_name='gcr',default='1', on_delete=models.CASCADE)#观察人
lookeder = models.CharField(max_length=100,null=True,blank=True)#被观察对象
submittime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,default='1', on_delete=models.CASCADE)
otherunsafe = models.CharField(max_length=1000,null=True,blank=True)
makeresult = models.CharField(max_length=1000,null=True,blank=True) #整改情况
safecontent = models.CharField(max_length=1000,null=True,blank=True)
deletemark = models.IntegerField(default='1')
lookimg = models.CharField(max_length=1000,null=True,blank=True)
unsafe = models.ManyToManyField(Dickey,related_name='baqxw',through='Unsafes')
record1 = models.TextField(null=True,blank=True) #交流情况
record2 = models.TextField(null=True,blank=True) #共识和改进
reads = models.ManyToManyField(User,related_name='observetouser',through='Observeto')
class Unsafes(models.Model):#行为观察不安全记录
observe = models.ForeignKey(Observe, on_delete=models.CASCADE)
unsafedickey = models.ForeignKey(Dickey,related_name='unsafedickey', on_delete=models.CASCADE)
unsafedicclass = models.ForeignKey(Dicclass,related_name='unsafedicclass', on_delete=models.CASCADE)
class Observeto(models.Model):#行为观察阅读记录
id = models.AutoField(primary_key=True)
observe = models.ForeignKey(Observe, on_delete=models.CASCADE)
user = models.ForeignKey(User,on_delete=models.CASCADE)
read = models.IntegerField(default=0)
submittime = models.DateTimeField(default = timezone.now)
class Miss(models.Model):#未遂事件
missid = models.AutoField(primary_key=True)
missnum = models.CharField(max_length=100,default='1')
missqy = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True)
missplace = models.CharField(max_length=200)
misstime = models.DateTimeField(default = timezone.now)
misspart = models.ForeignKey(Partment,related_name='fsbm',on_delete=models.CASCADE) #发生部门
misser = models.ForeignKey(User,related_name='fsr',default='1', on_delete=models.CASCADE)#当事人
description = models.CharField(max_length=1000,null=True,blank=True)
submittime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,default='1', on_delete=models.CASCADE)
deletemark = models.IntegerField(default='1')
missimg = models.CharField(max_length=1000,null=True,blank=True)
prevent = models.CharField(max_length=1000,null=True,blank=True) #防范措施
lesson = models.CharField(max_length=1000,null=True,blank=True) #经验教训
reads = models.ManyToManyField(User,related_name='misstouser',through='Missto')
class Missto(models.Model):#未遂事件阅读表
id = models.AutoField(primary_key=True)
miss = models.ForeignKey(Miss, on_delete=models.CASCADE)
user = models.ForeignKey(User,on_delete=models.CASCADE)
read = models.IntegerField(default=0)
submittime = models.DateTimeField(default = timezone.now)
class Group(models.Model):#用户组,岗位
type_choices = (
(1,'安全员'),
(2, '部门主管'),
(3, '全体用户'),
(4, '客户自定义'),
(0, '超管')
)
groupid = models.AutoField(primary_key=True)
groupname = models.CharField(max_length=30,blank=True,null=True)
grouptype = models.IntegerField(default=4)
users = models.ManyToManyField(User,related_name='userg')
users2 = models.ManyToManyField(User,related_name='userg2',through='Groupuser2')
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE,related_name='usecompg',default=1)
menulink = models.CharField(max_length=200,default='11')
class Groupuser2(models.Model): #比较好的方式
group = models.ForeignKey(Group, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
part = models.ForeignKey(Partment, on_delete=models.CASCADE,null=True,blank=True)
class Menu(models.Model):#菜单
menuid = models.AutoField(primary_key=True)
menuname = models.CharField(max_length=30,blank=True,null=True)
menucode = models.CharField(max_length=30,blank=True,null=True)
url = models.CharField(max_length=30,blank=True,null=True)
detail = models.CharField(max_length=100,blank=True,null=True)
parentid = models.ForeignKey('self',blank=True,null=True,on_delete=models.CASCADE)
icon = models.CharField(max_length=100,default='')
sortnum = models.IntegerField(default='1')
deletemark=models.IntegerField(default='1')
class Yjyc(models.Model):#预警预测表
yjycid = models.AutoField(primary_key=True)
buildtime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
year = models.IntegerField(default=1,null=True,blank=True)
month = models.IntegerField(default=1,null=True,blank=True)
week = models.IntegerField(default=0,null=True,blank=True)
yjz = models.FloatField(default=0)
ycz = models.FloatField(default=0)
b = models.FloatField(default=0)
troublevalue = models.FloatField(default=0)
trainvalue = models.FloatField(default=0)
drillvalue = models.FloatField(default=0)
observevalue = models.FloatField(default=0)
missvalue = models.FloatField(default=0)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
class Yjsetup(models.Model):#预警预测设置表
yjsetupid = models.AutoField(primary_key=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
modifytime = models.DateTimeField(auto_now = True)
monthyhavg = models.IntegerField(default='100',null=True,blank=True)
safev = models.IntegerField(default='10',null=True,blank=True)
warnv = models.IntegerField(default='15',null=True,blank=True)
alertv = models.IntegerField(default='20',null=True,blank=True)
maxv = models.IntegerField(default='50',null=True,blank=True)
yhpgqz = models.IntegerField(default='4',null=True,blank=True)
yhdjqz = models.IntegerField(default='4',null=True,blank=True)
yhsblqz = models.IntegerField(default='1',null=True,blank=True)
yhzglqz = models.IntegerField(default='4',null=True,blank=True)
pxdjqz = models.IntegerField(default='3',null=True,blank=True)
pxxgqz = models.IntegerField(default='4',null=True,blank=True)
yldjqz = models.IntegerField(default='3',null=True,blank=True)
ylxgqz = models.IntegerField(default='3',null=True,blank=True)
class Socertificate(models.Model):#特种作业证书
type_choices = (
(1,'正常'),
(2, '待复查'),
(3, '超期'),
)
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
realname = models.CharField(max_length=50)
gender = models.CharField(max_length=50)
cardnum = models.CharField(max_length=50)
zylb = models.CharField(max_length=50)
czxm = models.CharField(max_length=50)
fzjg = models.CharField(max_length=100)
ccfzrq = models.DateField(null=True,blank=True)
yfsrq = models.DateField(null=True,blank=True)
yxqkssj = models.DateField(null=True,blank=True)
yxqjssj = models.DateField(null=True,blank=True)
sjfssj = models.DateField(null=True,blank=True)
zszt = models.IntegerField(choices = type_choices,null=True,blank=True)
url = models.CharField(max_length=200,null=True,blank=True)
class Safecert(models.Model):#安全资格证书
type_choices = (
(1,'正常'),
(2, '待复查'),
(3, '超期'),
)
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
realname = models.CharField(max_length=50)
gender = models.CharField(max_length=50)
cardnum = models.CharField(max_length=50)
zglx = models.CharField(max_length=50) #资格类型
dwlx = models.CharField(max_length=50)
fzjg = models.CharField(max_length=100)
yfsrq = models.DateField(null=True,blank=True)
yxqkssj = models.DateField(null=True,blank=True)
yxqjssj = models.DateField(null=True,blank=True)
zszt = models.IntegerField(choices = type_choices,null=True,blank=True)
url = models.CharField(max_length=1000,null=True,blank=True)
class Suggest(models.Model):#合理化建议
ZT_CHOICES = (
(1, '待评估'),
(2, '待处理'),
(3, '待确认'),
(4, '已归档'),
)
jyid = models.AutoField(primary_key=True)
jynum = models.CharField(max_length=100,default='1')
jylb = models.ForeignKey(Dickey,related_name='jylb',on_delete=models.CASCADE)
jyrq = models.DateField(default = timezone.now)
jybm = models.ForeignKey(Partment,related_name='jybm',on_delete=models.CASCADE) #建议部门
jyr = models.ForeignKey(User,related_name='jyr',on_delete=models.CASCADE)#建议人
jyimg = models.CharField(max_length=1000,null=True,blank=True)
submittime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,default='1', on_delete=models.CASCADE)
dqxz = models.CharField(max_length=1000,null=True,blank=True) #当前现状
jynr = models.CharField(max_length=1000,null=True,blank=True) #建议内容
qwxg = models.CharField(max_length=1000,null=True,blank=True) #期望效果
jyfk = models.CharField(max_length=1000,null=True,blank=True) #建议反馈
clcs = models.CharField(max_length=1000,null=True,blank=True) #处理措施
clms = models.CharField(max_length=1000,null=True,blank=True) #处理描述
jyimg2 = JSONField()
jyzt = models.IntegerField(choices = ZT_CHOICES,null=True,blank=True)
todouser = models.ForeignKey(User,related_name='stodouser',on_delete=models.CASCADE,null=True,blank=True)#下一步处理人
pgr = models.ForeignKey(User,related_name='spgr',on_delete=models.CASCADE,null=True,blank=True)
clr = models.ForeignKey(User,related_name='sclr',on_delete=models.CASCADE,null=True,blank=True)
flow = models.ManyToManyField(User,related_name='jyflow',through='Suggestflow')
jyqy = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True)
jydd = models.CharField(max_length=200,null=True,blank=True)
yjwcsj = models.DateTimeField(null=True,blank=True) #预计完成时间
sjwcsj = models.DateTimeField(null=True,blank=True) #实际完成时间
shyj = models.CharField(max_length=1000,null=True,blank=True) #审核意见
accept = models.IntegerField(default=1)
class Suggestflow(models.Model):#建议流程
id = models.AutoField(primary_key=True)
suggest = models.ForeignKey(Suggest, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
action = models.CharField(max_length=100,null=True,blank=True)
opinion = models.CharField(max_length=500)
result = models.IntegerField(default=1)
submittime = models.DateTimeField(default = timezone.now)
class Notice(models.Model):#通知通告
id = models.AutoField(primary_key=True)
title = models.CharField(u'标题',max_length=100)
pubpart = models.ForeignKey(Partment,related_name='fbbm',on_delete=models.CASCADE)#发布部门
pubuser = models.ForeignKey(User,related_name='fbz',on_delete=models.CASCADE)#发布人
content = models.TextField(u'详情')
submittime = models.DateTimeField(u'创建时间',default = timezone.now)
modifytime = models.DateTimeField(u'更新时间',default = timezone.now)
tousers = models.ManyToManyField(User,related_name='tzry', through='Noticeto')
material = models.CharField(max_length=1000,null=True,blank=True)
deletemark = models.IntegerField(default='1')
reads = models.IntegerField(default='0')
isgg = models.IntegerField(default='1')
usecomps = models.CharField(max_length=1000,null=True,blank=True)#使用公司
# def __str__(self):
# return self.title
# class Meta:
# verbose_name = '资讯动态'
# verbose_name_plural = '资讯动态'
class Noticeto(models.Model):#通知阅读表
noticeid = models.ForeignKey(Notice, on_delete=models.CASCADE)
receiver = models.ForeignKey(User, on_delete=models.CASCADE)#接收人
comment = models.CharField(max_length=500)
read =models.IntegerField(default='0')
class Operation(models.Model):#作业表
zyid = models.AutoField(primary_key=True)
zylx = models.ForeignKey(Dickey, on_delete=models.CASCADE,null=True,blank=True)
zynum = models.CharField(max_length=100)
zyqy = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True)
zydd = models.CharField(max_length=100,null=True,blank=True)
zybm = models.ForeignKey(Partment,related_name='zybm',on_delete=models.CASCADE,null=True,blank=True)#作业部门
sdbm = models.ForeignKey(Partment,related_name='sdbm',on_delete=models.CASCADE,null=True,blank=True)#属地部门
zyfzr = models.ForeignKey(User,related_name='zyfzr',on_delete=models.CASCADE,null=True,blank=True)#作业负责人
zynr = models.TextField(null=True,blank=True)
zyry = models.ManyToManyField(User,related_name='zyry', through='Operzyry')
kssj = models.DateTimeField(default = timezone.now)
jssj = models.DateTimeField(default = timezone.now)
submittime = models.DateTimeField(u'创建时间',default = timezone.now)
zyimg = models.CharField(max_length=1000,default='')
zyimg2 = models.CharField(max_length=1000,default='')
deletemark = models.IntegerField(default='1')
zyzt = JSONField()
fxcs = models.CharField(max_length=200)
todouser = models.ForeignKey(User,related_name='zyclr',on_delete=models.CASCADE,null=True,blank=True)
todousers = ArrayField(models.IntegerField(), blank=True,null=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True,default=1)
class Fxcs(models.Model):#作业分析措施
id = models.AutoField(primary_key=True)
zylx = models.ForeignKey(Dickey, on_delete=models.CASCADE,null=True,blank=True)
fxfx = models.TextField()
aqcs = models.TextField()
cslx = models.CharField(max_length=100,null=True,blank=True)
submittime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
deletemark = models.IntegerField(default='1')
usecomps = models.CharField(max_length=200,default=',1,')
nousecomps = models.CharField(max_length=200,default='')
# class Opersplc(models.Model):
# id = models.AutoField(primary_key=True)
# oper= models.ForeignKey(Operation, on_delete=models.CASCADE)
# jdmc = models.CharField(max_length=100)
# spbm = models.CharField(max_length=200)
# spr = models.ForeignKey(User, on_delete=models.CASCADE)
# ison = models.IntegerField(default=0) #是否处于该状态
# modifytime = models.DateTimeField(auto_now = True)
# submittime = models.DateTimeField(default = timezone.now)
class Operspxq(models.Model):#作业审批流
id = models.AutoField(primary_key=True)
oper= models.ForeignKey(Operation, on_delete=models.CASCADE)
jdmc = models.CharField(max_length=200) #节点名称
spbm = models.ForeignKey(Partment, on_delete=models.CASCADE,null=True,blank=True)
spr = models.ForeignKey(User, on_delete=models.CASCADE)
action = models.CharField(max_length=200)
checked = models.IntegerField(default=1)#0未通过,1通过,2转交
submittime = models.DateTimeField(default = timezone.now)
class Operzyry(models.Model):#作业确认人
id = models.AutoField(primary_key=True)
oper= models.ForeignKey(Operation, on_delete=models.CASCADE)
operzyry = models.ForeignKey(User, on_delete=models.CASCADE)
checked = models.IntegerField(default=0)
modifytime = models.DateTimeField(auto_now = True)
submittime = models.DateTimeField(default = timezone.now)
class Operationspjd(models.Model):#作业审批节点配置
id = models.AutoField(primary_key=True)
zylx = models.ForeignKey(Dickey, on_delete=models.CASCADE,null=True,blank=True)
jdmc = models.CharField(max_length=100)
spbm = models.ForeignKey(Partment,related_name='spbm',on_delete=models.CASCADE,null=True,blank=True)#审批部门
spr = models.ForeignKey(User,related_name='spr',on_delete=models.CASCADE,null=True,blank=True)#审批部门
sprs = ArrayField(models.IntegerField(), blank=True,null=True)
submittime = models.DateTimeField(u'创建时间',default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
class Questioncat(models.Model):#题目分类
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
parent = models.ForeignKey('self',blank=True,null=True,on_delete=models.CASCADE)
deletemark=models.IntegerField(default='1')
link = models.CharField(max_length=200,blank=True,default=',')
creattime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
#题库数据表
class Question(models.Model):#题库
id = models.AutoField(primary_key=True)
title = models.TextField()
type = models.IntegerField(default=1) #单选/多选/判断
level = models.IntegerField(default=1) #低/中/高
questioncat = models.ForeignKey(Questioncat,blank=True,null=True,on_delete=models.CASCADE)
station = models.ForeignKey(Group,blank=True,null=True,on_delete=models.CASCADE) #岗位
mark = models.CharField(max_length=1000,blank=True)
answer = JSONField()
right = JSONField()
resolution = models.TextField()
deletemark=models.IntegerField(default=1)
createuser = models.ForeignKey(User,blank=True,null=True,on_delete=models.CASCADE)
creattime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomps = models.CharField(max_length=200,default=',1,')
nousecomps = models.CharField(max_length=200,default='')
class ExamPaper(models.Model):#试卷表
id = models.AutoField(primary_key=True)
num = models.CharField(max_length=200,default='')#编号
name = models.CharField(max_length=200)
state = models.IntegerField(default=1) #使用中/停用
deletemark=models.IntegerField(default=1)
createtime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
question = models.ManyToManyField(Question,through='ExamPaperDetail')
usecomps = models.CharField(max_length=200,default=',1,')
nousecomps = models.CharField(max_length=200,default='')
total = JSONField(null=True,blank=True) #题量
class ExamPaperDetail(models.Model):#试卷详情
id = models.AutoField(primary_key=True)
question = models.ForeignKey(Question,on_delete=models.CASCADE)
exampaper = models.ForeignKey(ExamPaper,on_delete=models.CASCADE)
score = models.IntegerField(default=0) #分数
class ExamTest(models.Model):#考试表
id = models.AutoField(primary_key=True)
num = models.CharField(max_length=200,default='')#编号
name = models.CharField(max_length=200,default='')
type = models.IntegerField(default=1) #正式考试/模拟考试/练习
state = models.IntegerField(default=1) #1进行中
exampaper = models.ForeignKey(ExamPaper,on_delete=models.CASCADE)
user = models.ManyToManyField(User,through='ExamTestDetail') #考试人员
starttime = models.DateTimeField(null=True,blank=True)#最早参加
endtime = models.DateTimeField(null=True,blank=True)#最迟参加
createtime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
totalscore=models.IntegerField(default=100)
passscore=models.IntegerField(default=60)
duration = models.IntegerField(default=60) #考试时长
usecomps = models.CharField(max_length=200,default=',1,')
nousecomps = models.CharField(max_length=200,default='')
createuser = models.ForeignKey(User,blank=True,null=True,on_delete=models.CASCADE,related_name='kscjr')
qrcode = models.CharField(max_length=200,blank=True,null=True)
class ExamTestDetail(models.Model):#考试详情表
id = models.AutoField(primary_key=True)
testnum = models.IntegerField(default=0) #做卷次数
examtest = models.ForeignKey(ExamTest,on_delete=models.CASCADE,null=True,blank=True)
user = models.ForeignKey(User,on_delete=models.CASCADE)
starttime = models.DateTimeField(null=True,blank=True)
endtime = models.DateTimeField(null=True,blank=True)
took = models.IntegerField(default=0) #耗时
rights = models.IntegerField(default=1) #正确数
ison = models.IntegerField(default=0) #未参加0/已参加1/
passcode = models.IntegerField(default=0) #是否通过
testdetail = JSONField(null=True,blank=True)
score = models.FloatField(default=0)#得分
tms = models.CharField(max_length=600,default=',')
wrongs = models.CharField(max_length=600,default=',')
class Train(models.Model):#培训表
trainid= models.AutoField(primary_key=True)
trainnum= models.CharField(max_length=100,default='1')
trainname = models.CharField(max_length=100)
trainplace=models.CharField(max_length=200)
starttime=models.DateTimeField(default = timezone.now)
duration=models.FloatField(default='1')
participant=models.ManyToManyField(User,related_name='cjr', through='Trainuser')
submituser=models.ForeignKey(User,related_name='tbr',default='1', on_delete=models.CASCADE)
submittime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,default='1', on_delete=models.CASCADE)
trainlevel=models.ForeignKey(Dicclass,related_name='pxjb',default='1', on_delete=models.CASCADE)
manlevel=models.ForeignKey(Dickey,related_name='rylx',default='1', on_delete=models.CASCADE)
traintype=models.ForeignKey(Dickey,related_name='pxlx',default='1', on_delete=models.CASCADE)
trainpart=models.ManyToManyField(Partment,related_name='pxbm',default='1')
traincontent=models.ForeignKey(Dickey,related_name='pxnr',default='1', on_delete=models.CASCADE)
detailcontent=models.CharField(max_length=1000,null=True,blank=True)
teacher=models.CharField(max_length=200,null=True,blank=True)
lecturer=models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
otherparticipant=models.CharField(max_length=1000,null=True,blank=True)
deletemark=models.IntegerField(default='1')
state=models.IntegerField(default='0')
participantnum=models.IntegerField(default='1',null=True,blank=True)
knownum=models.IntegerField(default='1',null=True,blank=True)
pxxg = models.CharField(max_length=1000,null=True,blank=True)
material = models.CharField(max_length=1000,null=True,blank=True)
checkqr = models.CharField(max_length=200,blank=True,null=True)
examtest = models.ForeignKey(ExamTest,on_delete=models.CASCADE,null=True,blank=True)
class Trainuser(models.Model):#培训人员记录
train = models.ForeignKey(Train, on_delete=models.CASCADE)
participant = models.ForeignKey(User, on_delete=models.CASCADE)
examtestdetail = models.ForeignKey(ExamTestDetail, on_delete=models.CASCADE,null=True,blank=True)
checked = models.IntegerField(default=0)
qdsj = models.DateTimeField(null=True,blank=True)
isnew = models.IntegerField(default=0)
opinion = models.CharField(max_length=1000,null=True,blank=True)
class Relation(models.Model):#各模块关系表,没用到
trouble = models.ForeignKey(Trouble, on_delete=models.CASCADE,null=True,blank=True)
train = models.ForeignKey(Train, on_delete=models.CASCADE,null=True,blank=True)
drill = models.ForeignKey(Drill, on_delete=models.CASCADE,null=True,blank=True)
observe = models.ForeignKey(Observe, on_delete=models.CASCADE,null=True,blank=True)
miss = models.ForeignKey(Miss, on_delete=models.CASCADE,null=True,blank=True)
remark = models.CharField(max_length=1000,null=True,blank=True)
class RiskAct(models.Model):#风险点表
id = models.AutoField(primary_key=True)
area = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True,related_name='riskactarea')
place = models.CharField(max_length=50,null=True,blank=True)
type = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
name = models.CharField(max_length=200,null=True,blank=True)
createtime = models.DateTimeField(default = timezone.now)
level = models.CharField(max_length=50,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
qrcode = models.CharField(max_length=200,blank=True,null=True)
gkcj = models.CharField(max_length=50,null=True,blank=True)#从此往下以风险点来管控
zrbm = models.ForeignKey(Partment,related_name='riskzrbm2',on_delete=models.CASCADE,null=True,blank=True)
zrr = models.ForeignKey(User,related_name='riskzrr2',on_delete=models.CASCADE,null=True,blank=True)
group = models.ForeignKey(Group,on_delete=models.CASCADE,null=True,blank=True)
modifytime = models.DateTimeField(auto_now = True)
tasktype = models.IntegerField(default=0)
tasktime = models.DateTimeField(null=True,blank=True) #最后任务开始时间
class Equipment(models.Model):#设备表
id = models.AutoField(primary_key=True)
num = models.CharField(max_length=30,null=True,blank=True)
name = models.CharField(max_length=30)
type = models.CharField(max_length=30,null=True,blank=True) #规格
catename = models.CharField(max_length=30,null=True,blank=True)#分类
parameter = models.TextField(null=True,blank=True)
oem = models.CharField(max_length=50,null=True,blank=True)
fnum = models.CharField(max_length=30,null=True,blank=True)
fdate = models.DateField(null=True,blank=True)
udate = models.DateField(null=True,blank=True)
place = models.CharField(max_length=50,null=True,blank=True)
note = models.TextField(null=True,blank=True) #备注
state = models.IntegerField(default=1) #正常/异常/停用
deletemark=models.IntegerField(default=1)
creattime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
usecomp = models.ForeignKey(Partment,related_name='sbssgs',on_delete=models.CASCADE,null=True,blank=True)
area = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True)
cate = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
iskey = models.IntegerField(default=0)
istz = models.IntegerField(default=0)
zrbm = models.ForeignKey(Partment,related_name='sbzrbm',on_delete=models.CASCADE,null=True,blank=True)
zrr = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
img = models.CharField(max_length=1000,blank=True,null=True)
qrcode = models.CharField(max_length=200,blank=True,null=True)
riskact = models.ForeignKey(RiskAct,null=True,blank=True,on_delete=models.CASCADE)
class Inspect(models.Model):#设备巡检记录
id = models.AutoField(primary_key=True)
state = models.IntegerField(default=1) #设备状态
content = models.TextField(null=True,blank=True)
equipment = models.ForeignKey(Equipment,blank=True,null=True,on_delete=models.CASCADE)
creattime = models.DateTimeField(default = timezone.now)
modifytime = models.DateTimeField(auto_now = True)
user = models.ForeignKey(User,blank=True,null=True,on_delete=models.CASCADE)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
trouble = models.ForeignKey(Trouble,on_delete=models.CASCADE,null=True,blank=True)
class Risk(models.Model):#风险表
tasktype_choices = (
(1,'8h'),
(2, '24h'),
(3, '7day'),
(4,'1month'),
(5,'1year')
)
id = models.AutoField(primary_key=True)
order = models.IntegerField(default=1)
step = models.TextField(null=True,blank=True)
hazard = models.TextField(null=True,blank=True)
result = models.TextField(null=True,blank=True)
measure1 = models.TextField(null=True,blank=True)
measure2 = models.TextField(null=True,blank=True)
measure3 = models.TextField(null=True,blank=True)
measure4 = models.TextField(null=True,blank=True)
measure5 = models.TextField(null=True,blank=True)
riskact = models.ForeignKey(RiskAct,on_delete=models.CASCADE,null=True,blank=True)
gkcj = models.CharField(max_length=50,null=True,blank=True)
zrbm = models.ForeignKey(Partment,related_name='riskzrbm',on_delete=models.CASCADE,null=True,blank=True)
zrr = models.ForeignKey(User,related_name='riskzrr',on_delete=models.CASCADE,null=True,blank=True)
createtime = models.DateTimeField(default = timezone.now)
createuser = models.ForeignKey(User,related_name='riskcjr',on_delete=models.CASCADE,null=True,blank=True)
riskl = models.DecimalField(max_digits=6,decimal_places=1)
riske = models.DecimalField(max_digits=6,decimal_places=1)
riskc = models.DecimalField(max_digits=6,decimal_places=1)
riskd = models.DecimalField(max_digits=6,decimal_places=1)
level = models.CharField(max_length=50,null=True,blank=True)
usecomp = models.ForeignKey(Partment,related_name='riskusecomp',on_delete=models.CASCADE,null=True,blank=True)
group = models.ForeignKey(Group,on_delete=models.CASCADE,null=True,blank=True)
modifytime = models.DateTimeField(auto_now = True)
tasktype = models.IntegerField(default=0)
tasktime = models.DateTimeField(null=True,blank=True) #最后任务开始时间
class Edulesson(models.Model):#在线视频表
id = models.AutoField(primary_key=True)
num = models.CharField(max_length=50)
title = models.CharField(max_length=50)
user = models.ForeignKey(User,related_name='scr',on_delete=models.CASCADE,null=True,blank=True)
submittime = models.DateTimeField(default = timezone.now)
desciption = models.TextField(null=True,blank=True)
type = models.IntegerField(default=1) #1是视频,2是文档
cate = models.ForeignKey(Questioncat,blank=True,null=True,on_delete=models.CASCADE)#分类按照题库进行分类
deletemark = models.IntegerField(default=1)
modifytime = models.DateTimeField(auto_now = True)
url = models.CharField(max_length=200,null=True,blank=True)
watchnum = models.IntegerField(default=0)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
watchrecord = models.ManyToManyField(User,related_name='gkr',through='EdulessonWatch')
class EdulessonWatch(models.Model):#在线视频观看情况表
id = models.AutoField(primary_key=True)
edulesson = models.ForeignKey(Edulesson, on_delete=models.CASCADE)
user = models.ForeignKey(User,on_delete=models.CASCADE)
submittime = models.DateTimeField(default = timezone.now)
class RiskActTask(models.Model):#风险点排查清单(任务)
id = models.AutoField(primary_key=True)
riskact = models.ForeignKey(RiskAct, on_delete=models.CASCADE,null=True,blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
taskadd = models.DateTimeField(null=True,blank=True)
taskdo = models.DateTimeField(null=True,blank=True)
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) #备注
state = models.IntegerField(default=1)#1是正常
istask = models.IntegerField(default=0)#是否是任务
class Risktask(models.Model):#风险排查任务清单
id = models.AutoField(primary_key=True)
risk = models.ForeignKey(Risk, on_delete=models.CASCADE,null=True,blank=True)
group = models.ForeignKey(Group, on_delete=models.CASCADE,null=True,blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
taskadd = models.DateTimeField(null=True,blank=True)
taskdo = models.DateTimeField(null=True,blank=True)
taskexpire = models.DateTimeField(null=True,blank=True)
trouble = models.ForeignKey(Trouble, on_delete=models.CASCADE,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) #备注
class Riskcheck2(models.Model):#风险排查记录2
id = models.AutoField(primary_key=True)
riskacttask = models.ForeignKey(RiskActTask, on_delete=models.CASCADE,null=True,blank=True)
risk = models.ForeignKey(Risk, on_delete=models.CASCADE,null=True,blank=True)
dotime = models.DateTimeField(null=True,blank=True)
trouble = models.ForeignKey(Trouble, on_delete=models.CASCADE,null=True,blank=True)
note = models.TextField(null=True,blank=True)
class Riskcheck(models.Model):#风险排查记录
id = models.AutoField(primary_key=True)
risk = models.ForeignKey(Risk, on_delete=models.CASCADE,null=True,blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
risktask = models.ForeignKey(Risktask, on_delete=models.CASCADE,null=True,blank=True)
dotime = models.DateTimeField(null=True,blank=True)
trouble = models.ForeignKey(Trouble, on_delete=models.CASCADE,null=True,blank=True)
note = models.TextField(null=True,blank=True)
class Report(models.Model):#分析报告表
id = models.AutoField(primary_key=True)
part = models.ForeignKey(Partment, on_delete=models.CASCADE,null=True,blank=True)
year = models.IntegerField(null=True,blank=True)
month = models.IntegerField(null=True,blank=True)
cause = models.TextField(null=True,blank=True) #原因分析
suggest = models.TextField(null=True,blank=True) #下一步建议
class CompanyInfo(models.Model):
company_nature = (
(0, '国企'),
(1, '私企'),
)
partment = models.OneToOneField(Partment, on_delete=models.CASCADE, verbose_name='公司ID')
name = models.CharField(max_length=64, verbose_name='公司名称')
nature = models.SmallIntegerField(choices=company_nature, default=0, verbose_name='企业性质')
address = models.CharField(max_length=128, verbose_name='公司地址')
fixed_assets = models.IntegerField(null=True, blank=True, verbose_name='固定资产')
website = models.CharField(max_length=64, null=True, blank=True, verbose_name='公司网址')
peoplenum = models.IntegerField(null=True, blank=True, verbose_name='公司人数')
legalperson = models.CharField(max_length=24, null=True, blank=True,verbose_name='法人代表')
legalperson_phone = models.CharField(max_length=24, null=True, blank=True, verbose_name='法人电话')
liaison = models.CharField(max_length=24, verbose_name='联系人')
liaison_phone = models.CharField(max_length=24, verbose_name='联系人电话')
introduce = models.TextField( null=True, blank=True, verbose_name='公司概况')
createtime = models.DateTimeField(auto_now_add=True)
modifytime = models.DateTimeField(auto_now=True)
#法律法规分类表
class Regulations(models.Model):
id = models.AutoField(primary_key=True)
typename = models.CharField(max_length=50)
parent = models.ForeignKey('self',blank=True,null=True,on_delete=models.CASCADE)
sortorder = models.IntegerField(default=0)
deletemark = models.IntegerField(default=1)
creattime = models.DateTimeField(default = timezone.now)
createuser = models.ForeignKey(User,related_name='rgs',on_delete=models.CASCADE,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
#法律法规阅读人员管理表
class FileReader(models.Model):
id = models.AutoField(primary_key=True)
kindnum = models.CharField(max_length=50)
readeruser = models.ForeignKey(User,on_delete=models.CASCADE)
readertime = models.DateTimeField(default = timezone.now)
deletemark = models.IntegerField(default=1)
#法律法规表
class FileManage(models.Model):
id = models.AutoField(primary_key=True)
maragename = models.CharField(max_length=50)
maragepath = models.CharField(max_length=200,null=True,blank=True)
readernum = models.IntegerField(default=0)
maragetype = models.ForeignKey(Regulations,on_delete=models.CASCADE,null=True,blank=True)
publisdate = models.DateTimeField(default = timezone.now)
versionnum = models.CharField(max_length=50)
maragestate = models.IntegerField(default=1) #0是现行,1是废止2修改3修订
accessorytype = models.CharField(max_length=50)
actualizedata = models.DateTimeField(default = timezone.now)
createdate = models.DateTimeField(default = timezone.now)
createuser = models.ForeignKey(User,on_delete=models.CASCADE)
usecomp= models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
downnum = models.IntegerField(default=0)
deletemark = models.IntegerField(default=1)
#管理制度表
class Mgtsystem(models.Model):
id = models.AutoField(primary_key=True)
mgtname = models.CharField(max_length=50)
type = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
mgtpath = models.CharField(max_length=200,null=True,blank=True)
publisdate = models.DateTimeField(default = timezone.now)
createuser = models.ForeignKey(User,on_delete=models.CASCADE)
deletemark = models.IntegerField(default=1)