1461 lines
71 KiB
Python
1461 lines
71 KiB
Python
from django.db import models
|
||
import uuid
|
||
from django.db.models import manager
|
||
import django.utils.timezone as timezone
|
||
from django.contrib.postgres.fields import JSONField, ArrayField
|
||
import jwt
|
||
import datetime
|
||
# Create your models here.
|
||
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule
|
||
|
||
|
||
|
||
class Menu(models.Model): # 菜单
|
||
type_choices = (
|
||
(1, '菜单'),
|
||
(2, '按钮'),
|
||
)
|
||
menuid = models.AutoField(primary_key=True,verbose_name='ID')
|
||
menuname = models.CharField(max_length=30, blank=True, null=True,verbose_name='名称')
|
||
menucode = models.CharField(max_length=30, blank=True, null=True,verbose_name='菜单标识')
|
||
url = models.CharField(max_length=30, blank=True, null=True,verbose_name='操作地址')
|
||
detail = models.CharField(max_length=100, blank=True, null=True,verbose_name='描述')
|
||
parentid = models.ForeignKey(
|
||
'self', blank=True, null=True, on_delete=models.CASCADE,verbose_name='上级')
|
||
icon = models.CharField(max_length=100, blank=True, null=True,verbose_name='图标')
|
||
sortnum = models.IntegerField(default=1,verbose_name='排序号')
|
||
deletemark = models.IntegerField(default=1,verbose_name='删除标记')
|
||
type = models.IntegerField(default=1,choices=type_choices,verbose_name='类型')#1是菜单,2是按钮
|
||
class Meta:
|
||
verbose_name = '菜单&按钮'
|
||
verbose_name_plural = "菜单&按钮"
|
||
def __str__(self):
|
||
return self.menuname+self.menucode
|
||
|
||
class Role(models.Model): #公司权限设置
|
||
"""
|
||
角色:用于权限绑定
|
||
"""
|
||
name = models.CharField(max_length=200, unique=True, verbose_name="角色")
|
||
permissions = models.ManyToManyField(Menu, blank=True, verbose_name="URL授权")
|
||
desc = models.CharField(max_length=200, blank=True, null=True, verbose_name="描述")
|
||
def __str__(self):
|
||
return self.name
|
||
|
||
class Partment(models.Model):
|
||
partid = models.AutoField(primary_key=True)
|
||
partname = models.CharField(max_length=200, default='生产部')
|
||
parentid = models.ForeignKey(
|
||
'self', blank=True, null=True, on_delete=models.CASCADE)
|
||
partlink = models.TextField(null=True, blank=True) # 关系
|
||
deletemark = models.IntegerField(default='1')
|
||
creattime = models.DateTimeField(default=timezone.now)
|
||
iscompany = models.IntegerField(default=0) # 是否是公司
|
||
aqy = models.TextField(default=',') # 安全员
|
||
bmzg = models.TextField(default=',') # 主管
|
||
bsq = models.TextField(default=',') # 授权者
|
||
position = JSONField('坐标', null=True, blank=True)
|
||
role = models.ForeignKey(Role, blank=True, null=True, on_delete=models.SET_NULL)
|
||
def __str__(self):
|
||
return self.partname
|
||
|
||
class MySchedule(models.Model):
|
||
name = models.CharField('名称', max_length=200)
|
||
typeset = models.CharField('类型', default=1,max_length=10)
|
||
interval = models.ForeignKey(IntervalSchedule, null=True, blank=True, on_delete=models.SET_NULL)
|
||
crontab = models.ForeignKey(CrontabSchedule, null=True, blank=True, on_delete=models.SET_NULL)
|
||
usecomp = models.ForeignKey(
|
||
Partment, on_delete=models.CASCADE)
|
||
|
||
class Map(models.Model):
|
||
# type_choices = (
|
||
# (1, '工厂'),
|
||
# (2, '矿山'),
|
||
# )
|
||
id = models.AutoField(primary_key=True)
|
||
name = models.CharField(max_length=50)
|
||
pic = models.TextField(blank=True)
|
||
parent = models.ForeignKey(
|
||
'self', blank=True, null=True, on_delete=models.CASCADE)
|
||
link = models.TextField(null=True, blank=True)
|
||
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE)
|
||
# type = models.IntegerField('地图类型', default=1, choices=type_choices)
|
||
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.TextField(null=True, 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=200)
|
||
epassword = models.CharField(max_length=200, blank=True, null=True)
|
||
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, on_delete=models.CASCADE, related_name='userprofile')
|
||
realname = models.CharField(max_length=50, default='') # 真实姓名
|
||
gender = models.CharField(max_length=50, default='男') # 性别
|
||
cardnum = models.CharField(max_length=50, default='') # 身份证号
|
||
|
||
|
||
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.TextField(default=',1,') # 所用公司
|
||
nousecomps = models.TextField(default='') # 不用公司
|
||
detail = models.TextField(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=400, default='test')
|
||
yhdj = models.ForeignKey(Dickey, related_name='yhdj',
|
||
on_delete=models.CASCADE, null=True, blank=True)
|
||
yhlxo = models.ForeignKey(Dickey, related_name='yhlxo',
|
||
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.TextField(blank=True)
|
||
zghtp = models.TextField(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.TextField(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) # 隐患区域
|
||
submituser = models.ForeignKey(User, related_name='submituser',
|
||
on_delete=models.CASCADE, null=True, blank=True) # 记录人
|
||
|
||
riskcheck2 = models.ForeignKey('safesite.riskcheck2',
|
||
verbose_name='关联检查', null=True, blank=True, related_name='trouble_riskcheck2', on_delete=models.SET_NULL)
|
||
|
||
|
||
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.TextField(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.TextField(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.TextField(null=True, blank=True)
|
||
material = models.TextField(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 ContingencyPlan(models.Model):
|
||
TYPE_CHOICES = (
|
||
('ZH', '综合应急预案'),
|
||
('ZX', '专项应急预案'),
|
||
('XC', '现场处置方案'),
|
||
)
|
||
id = models.AutoField(primary_key=True)
|
||
name = models.CharField(verbose_name='名称', max_length=200)
|
||
path = models.CharField(verbose_name='地址', max_length=200)
|
||
type = models.CharField(verbose_name='预案类型', max_length=200, choices=TYPE_CHOICES)
|
||
usecomp = models.ForeignKey(Partment, default=1, on_delete=models.CASCADE)
|
||
deletemark = models.IntegerField(default=1, verbose_name='删除标记')
|
||
createby = models.ForeignKey(User, on_delete=models.CASCADE)
|
||
createtime = models.DateTimeField(default=timezone.now, verbose_name='创建时间')
|
||
updatetime = models.DateTimeField(auto_now=True, verbose_name='编辑时间')
|
||
|
||
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.TextField(null=True, blank=True)
|
||
makeresult = models.TextField(null=True, blank=True) # 整改情况
|
||
safecontent = models.TextField(null=True, blank=True)
|
||
deletemark = models.IntegerField(default='1')
|
||
lookimg = models.TextField(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.TextField(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.TextField(null=True, blank=True)
|
||
prevent = models.TextField(null=True, blank=True) # 防范措施
|
||
lesson = models.TextField(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 Offence(models.Model):
|
||
"""
|
||
违章举报
|
||
"""
|
||
type = models.CharField(verbose_name="人员类型", default="公司员工", max_length=200)
|
||
dept = models.CharField(verbose_name="车间", default="", max_length=200)
|
||
post = models.CharField(verbose_name="岗位", default="", max_length=200)
|
||
area = models.ForeignKey(Area, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="区域")
|
||
place = models.CharField(verbose_name="具体地点", default="", max_length=200)
|
||
parter = models.CharField(verbose_name="当事人", default="", max_length=200)
|
||
description = models.TextField("描述", null=True, blank=True)
|
||
imgs = models.TextField("图片地址", null=True, blank=True)
|
||
happentime = models.DateTimeField('发生时间')
|
||
reporter = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="举报人")
|
||
|
||
createtime = models.DateTimeField(auto_now_add=True)
|
||
modifytime = models.DateTimeField(auto_now=True)
|
||
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司')
|
||
|
||
|
||
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.TextField(default='11')
|
||
menulist = ArrayField(models.IntegerField(), blank=True, null=True)
|
||
|
||
|
||
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 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.TextField(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.TextField(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.TextField(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.TextField(null=True, blank=True) # 当前现状
|
||
jynr = models.TextField(null=True, blank=True) # 建议内容
|
||
qwxg = models.TextField(null=True, blank=True) # 期望效果
|
||
jyfk = models.TextField(null=True, blank=True) # 建议反馈
|
||
clcs = models.TextField(null=True, blank=True) # 处理措施
|
||
clms = models.TextField(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.TextField(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.TextField(null=True, blank=True)
|
||
deletemark = models.IntegerField(default='1')
|
||
reads = models.IntegerField(default=0)
|
||
isgg = models.IntegerField(default='1') #1是公告,0是通知,2是资料文件
|
||
usecomps = models.TextField(null=True, blank=True) # 使用公司
|
||
like = models.IntegerField(default=0)
|
||
poster = models.CharField(max_length=200, null=True, blank=True, verbose_name='封面图')
|
||
supply_part = models.ForeignKey(
|
||
Partment, related_name='tgbm', on_delete=models.CASCADE, verbose_name="资料提供部门",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)
|
||
islike = 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.TextField(default='')
|
||
zyimg2 = models.TextField(default='')
|
||
deletemark = models.IntegerField(default='1')
|
||
zyzt = JSONField()
|
||
fxcs = models.TextField()
|
||
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.TextField(null=True, blank=True)
|
||
submittime = models.DateTimeField(default=timezone.now)
|
||
modifytime = models.DateTimeField(auto_now=True)
|
||
deletemark = models.IntegerField(default='1')
|
||
usecomps = models.TextField(default=',1,')
|
||
nousecomps = models.TextField(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)
|
||
suggestion = models.CharField(max_length=200, null=True, blank=True)
|
||
checked = models.IntegerField(default=1) # 0未通过,1通过,2提交上级,3未通过
|
||
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.TextField(null=True, 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)
|
||
isopen = models.IntegerField(default=0) #默认不共享
|
||
# 题库数据表
|
||
|
||
|
||
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.TextField(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)
|
||
parent = models.ForeignKey(
|
||
'self', blank=True, null=True, on_delete=models.CASCADE)
|
||
usecomps = models.TextField(default=',1,')
|
||
nousecomps = models.TextField(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.TextField(default=',1,')
|
||
nousecomps = models.TextField(default='')
|
||
total = JSONField(null=True, blank=True) # 题量
|
||
is_open = models.BooleanField('公开可考', default=False)
|
||
|
||
|
||
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进行中 0是已关闭
|
||
ispublic = models.IntegerField(default=0) # 默认不公开
|
||
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.TextField(default=',1,')
|
||
nousecomps = models.TextField(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)
|
||
testnum = models.IntegerField('考试机会', default=10)
|
||
|
||
|
||
|
||
class ExamTestDetail(models.Model): # 考试详情表
|
||
id = models.AutoField(primary_key=True)
|
||
testnum = models.IntegerField(default=0) # 做卷次数
|
||
remainnum = models.IntegerField('剩余次数', default=1)
|
||
examtest = models.ForeignKey(
|
||
ExamTest, on_delete=models.CASCADE, null=True, blank=True, related_name='detail_examtest')
|
||
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) # 正确数
|
||
passcode = models.IntegerField(default=0) # 是否通过
|
||
testdetail = JSONField(null=True, blank=True)
|
||
score = models.FloatField(default=0) # 得分
|
||
tms = models.TextField(default=',')
|
||
wrongs = models.TextField(default=',')
|
||
|
||
class TrainPlan(models.Model):
|
||
"""
|
||
月度培训计划
|
||
"""
|
||
purpose = models.TextField('培训目的')
|
||
year = models.IntegerField('年份', default=2021)
|
||
month = models.IntegerField('月份', default=1)
|
||
manager = models.ForeignKey(User, verbose_name="负责人", on_delete=models.CASCADE, related_name='trainplan_manager')
|
||
period = models.IntegerField('预计学时', default=0)
|
||
group = models.ForeignKey(Group, verbose_name='组', on_delete=models.SET_NULL, null=True, blank=True, related_name='trainplan_group')
|
||
usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE)
|
||
createtime = models.DateTimeField(default=timezone.now)
|
||
modifytime = models.DateTimeField(auto_now=True)
|
||
deletemark = models.IntegerField(default=1)
|
||
createby = models.ForeignKey(User, on_delete=models.CASCADE, related_name='trainplan_createby')
|
||
updateby = models.ForeignKey(User, on_delete=models.CASCADE, related_name='trainplan_updateby', null=True, blank=True)
|
||
completion = models.FloatField('完成度',default=0)
|
||
|
||
def __str__(self) -> str:
|
||
return str(self.year)+'年'+str(self.month)+'月计划'
|
||
|
||
class Train(models.Model): # 培训表
|
||
trainplan = models.ForeignKey(TrainPlan, on_delete=models.SET_NULL, null=True, blank=True)
|
||
trainid = models.AutoField(primary_key=True)
|
||
trainnum = models.CharField(max_length=100, default='1')
|
||
trainname = models.TextField()
|
||
trainplace = models.TextField()
|
||
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.TextField(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.TextField(null=True, blank=True)
|
||
deletemark = models.IntegerField(default='1')
|
||
state = models.IntegerField(default='0') #是否关闭
|
||
jsqd = models.IntegerField(verbose_name='结束签到',default=0)#默认关闭
|
||
participantnum = models.IntegerField(default='1', null=True, blank=True)
|
||
knownum = models.IntegerField(default='1', null=True, blank=True)
|
||
pxxg = models.TextField(null=True, blank=True)
|
||
material = models.TextField(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)
|
||
jsqd = models.DateTimeField(verbose_name='结束签到时间',null=True,blank=True)
|
||
isnew = models.IntegerField(default=0, verbose_name='是否新参加')
|
||
opinion = models.TextField('建议想法', null=True, blank=True)
|
||
score = models.IntegerField('评价总体打分', 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=200, null=True, blank=True)
|
||
|
||
|
||
class RiskAct(models.Model):
|
||
"""
|
||
风险点表/检查表
|
||
"""
|
||
table_type = models.IntegerField(default=1, verbose_name='表格类型', help_text='默认风险点,2是普通检查表')
|
||
kind_choices = (
|
||
(1, '工厂'),
|
||
(2, '矿山'),
|
||
)
|
||
id = models.AutoField(primary_key=True)
|
||
area = models.ForeignKey(Area, on_delete=models.CASCADE,
|
||
null=True, blank=True, related_name='riskactarea')
|
||
kind = models.IntegerField('类型', default=1, choices=kind_choices)
|
||
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) #0是暂停
|
||
tasktime = models.DateTimeField(null=True, blank=True) # 最后任务开始时间
|
||
|
||
class EquipmentCheckItem(models.Model):# 检查项目
|
||
name = models.CharField(max_length=200,verbose_name='检查项目')
|
||
content = models.TextField(verbose_name='检查内容')
|
||
type = models.ForeignKey(Dickey, on_delete=models.CASCADE, null=True, blank=True)
|
||
|
||
class EquipmentCheckForm(models.Model):# 检查表
|
||
name = models.CharField(max_length=200,verbose_name='名称')
|
||
desc = models.TextField(verbose_name='描述')
|
||
items = models.ManyToManyField(EquipmentCheckItem,related_name='checkitems', through='EFormItems')
|
||
deletemark = models.IntegerField(default=1,verbose_name="删除标记")
|
||
createby = models.ForeignKey(User,on_delete=models.CASCADE, verbose_name="创建人",null=True,blank=True)
|
||
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE, verbose_name='所属公司')
|
||
def __str__(self):
|
||
return self.name
|
||
|
||
|
||
class EFormItems(models.Model):
|
||
equipment_check_form = models.ForeignKey(EquipmentCheckForm,on_delete=models.CASCADE)
|
||
equipment_check_item = models.ForeignKey(EquipmentCheckItem,on_delete=models.CASCADE)
|
||
|
||
submittime = models.DateField(default=timezone.now)
|
||
|
||
class Equipment(models.Model): # 设备表
|
||
id = models.AutoField(primary_key=True)
|
||
num = models.CharField(max_length=100, null=True, blank=True)
|
||
name = models.CharField(max_length=100)
|
||
type = models.CharField(max_length=100, null=True, blank=True) # 规格
|
||
catename = models.CharField(max_length=100, null=True, blank=True) # 分类
|
||
parameter = models.TextField(null=True, blank=True)
|
||
oem = models.CharField(max_length=100, null=True, blank=True)
|
||
fnum = models.CharField(max_length=100, null=True, blank=True)
|
||
fdate = models.DateField(null=True, blank=True)
|
||
udate = models.DateField(null=True, blank=True)
|
||
place = models.CharField(max_length=100, 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)
|
||
checkform = models.ForeignKey(EquipmentCheckForm,on_delete=models.CASCADE,null=True,blank=True)
|
||
|
||
|
||
class Inspect(models.Model): # 设备巡检记录
|
||
id = models.AutoField(primary_key=True)
|
||
state = models.IntegerField(default=1) # 设备状态
|
||
type = models.ForeignKey(Dickey, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='巡检类型')
|
||
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 InspectItem(models.Model):
|
||
state_choices = (
|
||
('正常', '正常'),
|
||
('异常待处理', '异常待处理'),
|
||
('异常已处理', '异常已处理'),
|
||
)
|
||
checked = models.BooleanField('是否已检查', default=True)
|
||
state = models.CharField('状态',choices=state_choices, default='正常', max_length=200)
|
||
inspect = models.ForeignKey(Inspect, on_delete=models.CASCADE, null=True, blank=True)
|
||
todouser = models.ForeignKey(User, on_delete=models.CASCADE, null=True,blank=True)
|
||
handletime = models.DateTimeField('处理时间', null=True, blank=True)
|
||
checkitem = models.ForeignKey(EquipmentCheckItem, on_delete=models.CASCADE)
|
||
desc = models.TextField('描述', null=True, blank=True)
|
||
img = models.TextField('现场图片', null=True, blank=True)
|
||
img2 = models.TextField('处理后图片', null=True, blank=True)
|
||
desc2 = models.TextField('处理后描述', 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)
|
||
content = models.TextField(null=True, blank=True)
|
||
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=100, 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, null=True, blank=True)
|
||
riske = models.DecimalField(max_digits=6, decimal_places=1, null=True, blank=True)
|
||
riskc = models.DecimalField(max_digits=6, decimal_places=1, null=True, blank=True)
|
||
riskd = models.DecimalField(max_digits=6, decimal_places=1, null=True, blank=True)
|
||
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)
|
||
downnum = 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 GridTaskSet(models.Model):
|
||
"""
|
||
网格化管理任务制定
|
||
隐患跟踪任务/风险点排查任务/检查表任务
|
||
"""
|
||
riskact = models.ForeignKey(RiskAct, on_delete=models.CASCADE, related_name='gridtaskset_riskact', null=True, blank=True)
|
||
trouble = models.ForeignKey(Trouble, on_delete=models.CASCADE, related_name='gridtaskset_trouble', null=True, blank=True)
|
||
gridlevel = models.ForeignKey(Dickey, on_delete=models.CASCADE, verbose_name='网格化层级', null=True, blank=True)
|
||
user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='执行人')
|
||
note = models.TextField('备注', null=True)
|
||
myschedule = models.ForeignKey(MySchedule,on_delete=models.SET_NULL, null=True, blank=True)
|
||
expire = models.IntegerField('执行有效期', null=True, blank=True)
|
||
count = models.IntegerField('派发次数', default=0)
|
||
last_run_at = models.DateTimeField('最近派发时间', null=True, blank=True)
|
||
periodictask = models.ForeignKey(PeriodicTask, on_delete=models.CASCADE, related_name='gridtaskset_periodictask')
|
||
|
||
class TroubleFollowTask(models.Model):
|
||
"""
|
||
隐患跟踪任务
|
||
"""
|
||
trouble = models.ForeignKey(Trouble, on_delete=models.CASCADE)
|
||
gridlevel = models.ForeignKey(Dickey, on_delete=models.CASCADE, verbose_name='网格化层级', null=True, blank=True)
|
||
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="跟踪人")
|
||
taskadd = models.DateTimeField('任务创建时间', null=True, blank=True)
|
||
taskdo = models.DateTimeField('任务执行时间', null=True, blank=True)
|
||
taskexpire = models.DateTimeField('任务过期时间', null=True, blank=True)
|
||
desc = models.TextField('跟踪描述', null=True, blank=True)
|
||
tasknote = models.TextField('任务执行说明', null=True, blank=True)
|
||
usable = models.IntegerField(default=1) # 1是可用,2是变更计划,0是不可用
|
||
taskset = models.ForeignKey(GridTaskSet, null=True, blank=True, verbose_name='由哪个设置派发', on_delete=models.SET_NULL)
|
||
|
||
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) # 是否是任务
|
||
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)
|
||
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, related_name='riskcheck2_trouble')
|
||
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, related_name='riskcheck_trouble')
|
||
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='公司概况')
|
||
enp_number = models.CharField(max_length=50, verbose_name='环评批复文号', null=True, blank=True)
|
||
waste_number = models.CharField(max_length=50, verbose_name='排污许可证编号', null=True, blank=True)
|
||
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=100)
|
||
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=100)
|
||
maragestate = models.IntegerField(default=1) # 0是现行,1是废止,2修改,3修订
|
||
accessorytype = models.CharField(max_length=100)
|
||
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)
|
||
|
||
|
||
|
||
#责任制表
|
||
class Resbility(models.Model):
|
||
id = models.AutoField(primary_key=True)#主键
|
||
title = models.CharField(max_length=50)#标题
|
||
jobs = models.ForeignKey(Group,on_delete=models.CASCADE,null=True,blank=True)#岗位
|
||
homeworktype=models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)#作业许可类型
|
||
department = models.ForeignKey(Partment,related_name='resbbm',on_delete=models.CASCADE,null=True,blank=True)#部门
|
||
resbilitypath = models.CharField(max_length=200,null=True,blank=True)#上传文件
|
||
createuser = models.ForeignKey(User,on_delete=models.CASCADE)#上传者
|
||
createdate = models.DateTimeField(default = timezone.now)#上传时间
|
||
usecomp = models.ForeignKey(Partment,related_name='resbgs',on_delete=models.CASCADE,null=True,blank=True)#所属公司
|
||
deletemark = models.IntegerField(default=1)#是否删除
|
||
filepath=models.CharField(max_length=200,null=True,blank=True)
|
||
reads = models.IntegerField(default='0')
|
||
#操作规程
|
||
class Operproce(models.Model):
|
||
id = models.AutoField(primary_key=True)#主键
|
||
title = models.CharField(max_length=50)#标题
|
||
jobs = models.ForeignKey(Group,on_delete=models.CASCADE,null=True,blank=True)#岗位
|
||
homeworktype=models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)#作业许可类型
|
||
department = models.ForeignKey(Partment,related_name='optbm',on_delete=models.CASCADE,null=True,blank=True)#部门
|
||
operprocepath = models.CharField(max_length=200,null=True,blank=True)#上传文件
|
||
createuser = models.ForeignKey(User,on_delete=models.CASCADE)#上传者
|
||
createdate = models.DateTimeField(default = timezone.now)#上传时间
|
||
usecomp = models.ForeignKey(Partment,related_name='optgs',on_delete=models.CASCADE,null=True,blank=True)#所属公司
|
||
deletemark = models.IntegerField(default=1)#是否删除
|
||
filepath=models.CharField(max_length=200,null=True,blank=True)
|
||
reads = models.IntegerField(default='0')
|
||
#责任阅读表
|
||
class Readerblility(models.Model):
|
||
readid = models.ForeignKey(Resbility, on_delete=models.CASCADE)#主键
|
||
num = models.CharField(max_length=50)
|
||
readeruser = models.ForeignKey(User,on_delete=models.CASCADE)
|
||
readertime = models.DateTimeField(default = timezone.now)
|
||
#操作规程阅读表
|
||
class ReaderOperproce(models.Model):
|
||
readid = models.ForeignKey(Operproce, on_delete=models.CASCADE)#主键
|
||
num = models.CharField(max_length=50)
|
||
readeruser = models.ForeignKey(User,on_delete=models.CASCADE)
|
||
readertime = models.DateTimeField(default = timezone.now)
|
||
#检查项目
|
||
class Checkproject(models.Model):
|
||
id =models.AutoField(primary_key=True)#主键
|
||
checktitle=models.TextField()#检查项目标题
|
||
checkcontent=models.TextField()#检查内容
|
||
requirements=models.TextField()#检查要求
|
||
createuser = models.ForeignKey(User,on_delete=models.CASCADE)#创建人
|
||
createdate = models.DateTimeField(default = timezone.now)#创建时间
|
||
usecomp = models.ForeignKey(Partment,related_name='checkcomp',on_delete=models.CASCADE,null=True,blank=True)#创建公司
|
||
deletemark = models.IntegerField(default=1)#是否删除
|
||
#检查表
|
||
class Checktable(models.Model):
|
||
id =models.AutoField(primary_key=True)#主键
|
||
checktitle=models.TextField()#检查表名
|
||
checkprjtype=models.ManyToManyField(Checkproject)#检查项目多选
|
||
checkcontent=models.TextField()#检查内容
|
||
createuser = models.ForeignKey(User,on_delete=models.CASCADE)#创建人
|
||
createdate = models.DateTimeField(default = timezone.now)#创建时间
|
||
usecomp = models.ForeignKey(Partment,related_name='checktabcomp',on_delete=models.CASCADE,null=True,blank=True)#创建公司
|
||
deletemark = models.IntegerField(default=1)#是否删除
|
||
|
||
|
||
#检查任务
|
||
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)#关联检查表
|
||
checkname=models.ManyToManyField(User,related_name='jiancha')#检查人员
|
||
checktime= models.DateTimeField(null=True, blank=True)#任务首次执行时间
|
||
checkplace=models.TextField(default='')#检查地点
|
||
createuser = models.ForeignKey(User,related_name='chuangjians',on_delete=models.CASCADE)#创建人
|
||
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=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)#检查人员
|
||
checkquestion=models.TextField(null=True)#检查发现的问题
|
||
zgtime=models.DateTimeField(null=True, blank=True)#整改时间
|
||
jctime=models.DateTimeField(null=True, blank=True)#检查开始时间
|
||
jctime2 = models.DateTimeField('检查结束时间', null=True, blank=True)
|
||
zguser=models.ForeignKey(User,on_delete=models.CASCADE,null=True,)#整改人
|
||
createuser = models.ForeignKey(User,related_name='chuangjian',on_delete=models.CASCADE,null=True)#创建人
|
||
createdate = models.DateTimeField(default = timezone.now)#创建时间
|
||
usecomp = models.ForeignKey(Partment,related_name='taskcomps',on_delete=models.CASCADE,null=True,blank=True)#创建公司
|
||
deletemark = models.IntegerField(default=1)#是否删除
|
||
taskstate = models.IntegerField(default=1, choices=taskstate_choice)#执行状态,1正在检查,2检查完毕,3,已关闭,4,未执行
|
||
starttime=models.DateTimeField(null=True, blank=True)#任务开始时间
|
||
endtime=models.DateTimeField(null=True, blank=True)#任务结束时间
|
||
jobstate = models.IntegerField(default=1)#检查任务状态,1可执行,2过期
|
||
zgyq=models.TextField(null=True)#整改要求
|
||
zgjg=models.TextField(null=True)#整改结果
|
||
yanshou=models.DateTimeField(null=True, blank=True)#验收时间
|
||
yanshouren=models.ForeignKey(User,related_name='yanshouren',on_delete=models.CASCADE,null=True)#验收人员
|
||
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)
|
||
|
||
|
||
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) |