safesite/safesite/models.py

1368 lines
67 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
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) # 记录人
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 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 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)
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.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)
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)
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): # 风险点表
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)
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)
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)
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='网格化层级')
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)
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=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):
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=0)#任务执行频率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):
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)#检查时间
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)#执行状态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)