factory/apps/opm/models.py

168 lines
9.1 KiB
Python

from django.db import models
from apps.system.models import User
from apps.third.models import TDevice
from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBDModel
# Create your models here.
class OplCate(CommonAModel):
"""
作业许可种类
"""
code = models.CharField('标识', max_length=10, unique=True)
name = models.CharField('名称', max_length=20, unique=True)
description = models.TextField('描述', null=True, blank=True)
workflow = models.ForeignKey('wf.workflow', verbose_name='使用的工作流',
on_delete=models.SET_NULL,
null=True, blank=True)
template_export = models.TextField('导出word模板', null=True, blank=True)
risk_options = models.ManyToManyField('system.dictionary',
verbose_name='风险分析',
related_name='oplcate_risk_options')
measure_options = models.ManyToManyField('system.dictionary',
verbose_name='控制措施',
related_name='oplcate_measure_options')
close_options = models.ManyToManyField('system.dictionary',
verbose_name='关闭工作',
related_name='oplcate_close_options')
class Operation(CommonBDModel):
OP_CREATE = 10
OP_AUDIT = 20
OP_WAIT = 30
OP_WORK = 40
OP_CLOSE = 50
OP_STATE_CHOICES = (
(OP_CREATE, '创建中'),
(OP_AUDIT, '审批中'),
(OP_WAIT, '待作业'),
(OP_WORK, '作业中'),
(OP_CLOSE, '已关闭')
)
number = models.CharField('作业编号', max_length=20, null=True, blank=True)
name = models.CharField('作业简述', max_length=200)
area = models.ForeignKey('am.area', verbose_name='作业区域',
on_delete=models.CASCADE)
state = models.PositiveSmallIntegerField('作业状态', default=10)
place = models.TextField('具体地点', null=True, blank=True)
start_time = models.DateTimeField('作业开始时间')
end_time = models.DateTimeField('作业结束时间')
dept_ter = models.ForeignKey('system.dept', verbose_name='属地部门',
on_delete=models.CASCADE,
related_name='op_dept_ter')
dept_bus = models.ForeignKey('system.dept', verbose_name='业务部门',
on_delete=models.CASCADE,
related_name='op_dept_bus')
coordinator = models.ForeignKey('system.user', verbose_name='业务部门协调员',
on_delete=models.CASCADE)
state_work = models.CharField('生产状态', max_length=20, help_text='运行/停机/检修')
cates = models.ManyToManyField(OplCate, through='opm.opl')
vchannels = models.ManyToManyField(TDevice, verbose_name='监控所用摄像头')
class Opl(CommonBDModel):
"""
作业许可证
"""
CLOSE_CHOICES1 = (
(10, '作业正常结束'),
(20, '因计划改变停止作业'),
(30, '因发生异常终止作业'),
(40, '其他')
)
operation = models.ForeignKey(Operation, verbose_name='关联作业',
on_delete=models.CASCADE, related_name='opl_operation')
number = models.CharField('作业许可编号', max_length=20, null=True, blank=True)
level = models.CharField('作业级别', max_length=20,
help_text='特技/三级/二级/主干道/次干道', null=True, blank=True)
cate = models.ForeignKey(OplCate, verbose_name='作业许可种类',
on_delete=models.CASCADE)
start_time = models.DateTimeField('作业开始时间', null=True, blank=True)
end_time = models.DateTimeField('作业结束时间', null=True, blank=True)
dept_do = models.ForeignKey('system.dept', verbose_name='作业部门',
on_delete=models.CASCADE)
charger = models.ForeignKey('system.user', verbose_name='作业负责人',
on_delete=models.CASCADE, related_name='opl_charger')
monitor = models.ForeignKey('system.user', verbose_name='作业监护人',
on_delete=models.CASCADE, related_name='opl_monitor')
# electrician = models.ForeignKey(User, verbose_name='电工',
# on_delete=models.CASCADE,
# related_name='opl_electrician', null=True, blank=True)
work_time = models.DateTimeField('安装/拆除时间', null=True, blank=True)
accept_time = models.DateTimeField('验收时间', null=True, blank=True)
work_type = models.CharField('安装/拆除', max_length=20, null=True, blank=True)
power = models.PositiveIntegerField('用电功率', null=True, blank=True)
power_to = models.CharField('用电地点', max_length=20, null=True, blank=True)
power_from = models.CharField('电源接入点', max_length=20, null=True, blank=True)
power_end_time = models.DateTimeField('用电截至', null=True, blank=True)
power_start_time = models.DateTimeField('用电开始', null=True, blank=True)
power_days = models.PositiveSmallIntegerField('计划用电天数', null=True, blank=True)
other_risk = models.TextField('其他风险', null=True, blank=True)
other_emr = models.TextField('其他应急处置', null=True, blank=True)
escape_route = models.TextField('逃生路径', null=True, blank=True)
risks_checked = models.JSONField('风险选择', default=list, null=False, blank=True)
measures_checked = models.JSONField('措施选择', default=list, null=False, blank=True)
workers = models.ManyToManyField('system.user', verbose_name='作业人员', through='opm.oplworker')
create_imgs = models.ManyToManyField('system.file', verbose_name='作业审批照片',
related_name='opl_create_imgs', blank=True)
close_imgs = models.ManyToManyField('system.file', verbose_name='作业关闭照片',
related_name='opl_close_imgs', blank=True)
close_note = models.PositiveSmallIntegerField('作业关闭情况',
choices=CLOSE_CHOICES1,
help_text='正常结束/计划改变停止/发生异常停止/其他',
null=True, blank=True)
close_dos = models.JSONField('关闭工作', default=list, null=False, blank=True)
close_desc = models.TextField('作业关闭描述', null=True, blank=True)
ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单',
on_delete=models.SET_NULL,
null=True, blank=True)
mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True)
class OplWorker(BaseModel):
"""
作业许可人员
"""
worker = models.ForeignKey('system.user', verbose_name='作业人员',
on_delete=models.CASCADE)
opl = models.ForeignKey(Opl, verbose_name='作业许可',
on_delete=models.CASCADE)
duty = models.CharField('工作职责', max_length=100,
null=True, blank=True,
help_text='作业人员/起重司机/司索人员/起重指挥/电工')
certificates = models.ManyToManyField('hrm.certificate', verbose_name='关联证书', through='opm.oplcert')
class OplCert(BaseModel):
"""
作业许可人员证书
"""
opl_worker = models.ForeignKey(OplWorker, verbose_name='关联作业人员',
on_delete=models.CASCADE)
certificate = models.ForeignKey('hrm.certificate', verbose_name='关联证书',
on_delete=models.CASCADE)
name = models.CharField('证书名称', max_length=20)
number = models.CharField('证书编号', max_length=20)
type = models.PositiveSmallIntegerField('证书类型', default=10)
issue_date = models.DateField('发证日期')
expiration_date = models.DateField('有效期')
review_date = models.DateField('下一次复审日期')
file = models.TextField('文件地址', null=True, blank=True)
class GasCheck(CommonADModel):
"""
气体检测记录
"""
check_time = models.DateTimeField('检测时间')
check_place = models.CharField('检测部位', max_length=100)
o2 = models.DecimalField(decimal_places=1, max_digits=3, null=True, blank=True)
co = models.PositiveSmallIntegerField(null=True, blank=True)
h2s = models.PositiveSmallIntegerField(null=True, blank=True)
lel = models.DecimalField(decimal_places=1, max_digits=3, null=True, blank=True)
f5 = models.CharField(max_length=10, null=True, blank=True)
is_ok = models.BooleanField('是否正常', default=True)
checker = models.ForeignKey(User, verbose_name='检测人', on_delete=models.CASCADE)
opl = models.ForeignKey(Opl, verbose_name='关联作业许可', on_delete=models.CASCADE)