factory/apps/dpm/models.py

157 lines
9.1 KiB
Python

from django.db import models
from apps.utils.models import BaseModel, CommonAModel, CommonADModel
from django_celery_beat.models import PeriodicTask
# Create your models here.
class RiskPoint(CommonAModel):
"""
TN: 风险点表
"""
R_LEVEL = (
(10, '低风险'),
(20, '一般风险'),
(30, '较大风险'),
(40, '重大风险')
)
R_TYPE = (
(10, '作业活动类'),
(20, '设备设施类')
)
R_M_LEVEL = (
(10, '岗位级'),
(20, '班组级'),
(30, '部门级'),
(40, '公司级')
)
name = models.CharField('名称', max_length=40)
area = models.ForeignKey('am.area', on_delete=models.CASCADE, verbose_name='所在区域', related_name='riskpoint_area', null=True, blank=True)
place = models.CharField('具体地点', max_length=100, null=True, blank=True)
level = models.PositiveSmallIntegerField('风险点等级', default=10, choices=R_LEVEL)
type = models.PositiveSmallIntegerField('风险点类型', default=10, choices=R_TYPE)
manage_level = models.PositiveSmallIntegerField('管控层级', default=10, choices=R_M_LEVEL)
dept_res = models.ForeignKey('system.dept', on_delete=models.SET_NULL, verbose_name='责任部门', related_name='riskpoint_dept_res', null=True, blank=True)
user_res = models.ForeignKey('system.user', on_delete=models.CASCADE, verbose_name='责任人', related_name='riskpoint_user_res', null=True, blank=True)
class Risk(CommonAModel):
"""
TN: 风险表
"""
name = models.TextField('项目/步骤')
level = models.PositiveSmallIntegerField('风险等级', default=10, choices=RiskPoint.R_LEVEL)
standard = models.TextField('检查标准', null=True, blank=True)
hazard_factors = models.TextField('危害因素', null=True, blank=True)
results = models.ManyToManyField('system.dictionary', verbose_name='可能后果', related_name='risk_results', blank=True)
sort = models.PositiveSmallIntegerField('排序', default=1)
measure_tech = models.TextField('工程技术措施', null=True, blank=True)
measure_manage = models.TextField('管理措施', null=True, blank=True)
measure_edu = models.TextField('培训教育措施', null=True, blank=True)
measure_protect = models.TextField('个体防护措施', null=True, blank=True)
measure_emer = models.TextField('应急处置措施', 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)
riskpoint = models.ForeignKey(RiskPoint, on_delete=models.CASCADE, verbose_name='所属风险点')
class CheckTaskSet(CommonADModel):
"""
TN:检查任务派发设置
"""
riskpoint = models.ForeignKey(RiskPoint, verbose_name='关联风险点', related_name='ctask_riskpoint', on_delete=models.SET_NULL, null=True, blank=True)
note = models.TextField('派发备注', null=True, blank=True)
expire = models.PositiveSmallIntegerField('执行有效期(h)', default=0, help_text='0代表不设限制直到下个任务派发')
user_duty = models.ForeignKey('system.user', verbose_name='指派人', on_delete=models.SET_NULL, null=True, blank=True)
myschedule = models.ForeignKey('system.myschedule', verbose_name='周期', on_delete=models.SET_NULL, null=True, blank=True)
periodictask = models.ForeignKey(PeriodicTask, verbose_name='关联定时任务', on_delete=models.CASCADE, related_name='checktask_periodictask')
class CheckWork(CommonAModel):
"""
TN: 检查工作
"""
CW_TYPE = (
(10, '手动'),
(20, '派发')
)
name = models.CharField('名称', max_length=40)
description = models.TextField('工作描述', null=True, blank=True)
type = models.PositiveSmallIntegerField('任务类型', default=10, choices=CW_TYPE)
category = models.ForeignKey('system.dictionary', on_delete=models.CASCADE, verbose_name='工作分类', null=True, blank=True)
usable = models.BooleanField('是否可用', default=True)
time_start = models.DateTimeField('开启时间')
time_end = models.DateTimeField('关闭时间', null=True, blank=True)
user_duty = models.ForeignKey('system.user', verbose_name='指派人', on_delete=models.SET_NULL, null=True, blank=True)
riskpoint = models.ForeignKey(RiskPoint, verbose_name='关联风险点', related_name='cwork_riskpoint', on_delete=models.SET_NULL, null=True, blank=True)
note = models.TextField('检查备注', null=True, blank=True)
time_check = models.DateTimeField('开始检查时间', null=True, blank=True)
checktaskset = models.ForeignKey(CheckTaskSet, verbose_name='关联派发策略', on_delete=models.CASCADE, null=True, blank=True)
class Hazard(CommonADModel):
"""
TN: 事故隐患表
"""
H_HARM = (
(10, '无伤害'),
(20, '轻微伤'),
(30, '轻伤'),
(40, '重伤'),
(50, '死亡')
)
H_LEVEL = (
(10, '无隐患'),
(20, '一般隐患'),
(30, '重大隐患')
)
H_STATE = (
(10, '待提交'),
(20, '流程中'),
(30, '已结束')
)
number = models.CharField('编号', max_length=20, null=True, blank=True)
checkwork = models.ForeignKey(CheckWork, on_delete=models.SET_NULL, verbose_name='关联检查工作', null=True, blank=True)
state = models.PositiveSmallIntegerField('隐患流程状态', default=10, choices=H_STATE)
time_discover = models.DateTimeField('发现时间')
dept_res = models.ForeignKey('system.dept', on_delete=models.SET_NULL, verbose_name='责任部门', related_name='hazard_dept_res', null=True, blank=True)
user_discover = models.ForeignKey('system.user', on_delete=models.CASCADE, verbose_name='发现人', related_name='hazard_user_discover')
area = models.ForeignKey('am.area', on_delete=models.CASCADE, verbose_name='所在区域', null=True, blank=True)
place = models.CharField('具体地点', max_length=100, null=True, blank=True)
level = models.PositiveSmallIntegerField('隐患等级', default=10, choices=H_LEVEL)
harm_access = models.PositiveSmallIntegerField('伤害评估', default=10, choices=H_HARM)
category = models.ForeignKey('system.dictionary', on_delete=models.CASCADE, verbose_name='隐患类别', null=True, blank=True)
description = models.TextField('隐患描述', null=True, blank=True)
reason = models.TextField('原因分析', null=True, blank=True)
correct_measure = models.TextField('整改措施', null=True, blank=True)
correct_solution = models.ForeignKey('system.file', verbose_name='整改方案', on_delete=models.SET_NULL, null=True, blank=True)
correct_deadline = models.DateTimeField('整改期限', null=True, blank=True)
photos = models.ManyToManyField('system.file', verbose_name='现场照片', related_name='hazard_photos', blank=True)
correct_description = models.TextField('整改描述', null=True, blank=True)
photos_done = models.ManyToManyField('system.file', verbose_name='整改后照片', related_name='hazard_photos_done', blank=True)
dept_correct = models.ForeignKey('system.dept', on_delete=models.CASCADE, verbose_name='整改部门', related_name='hazard_dept_correct', null=True, blank=True)
user_correct = models.ForeignKey('system.user', on_delete=models.SET_NULL, verbose_name='整改责任人', related_name='hazard_user_correct', null=True, blank=True)
correct_time = models.DateTimeField('整改完成时间', null=True, blank=True)
# user_access = models.ForeignKey('system.user', on_delete=models.CASCADE, verbose_name='评估人', related_name='hazard_user_access')
# opinion_access = models.TextField('评估意见', null=True, blank=True)
# user_check = models.ForeignKey('system.user', on_delete=models.CASCADE, verbose_name='复查人', related_name='hazard_user_check')
# opinion_check = models.TextField('复查意见', null=True, blank=True)
# user_audit = models.ForeignKey('system.user', on_delete=models.CASCADE, verbose_name='审核人', related_name='hazard_user_audit')
# opinion_audit = models.TextField('审核意见', null=True, blank=True)
ticket = models.ForeignKey('wf.ticket', on_delete=models.SET_NULL, verbose_name='关联工单', related_name='hazard_ticket', null=True, blank=True)
class CheckItem(BaseModel):
"""
TN:检查工作-隐患关联表
"""
CITEM_RESULT = (
(10, '未检查'),
(20, '合格'),
(30, '不合格')
)
checkwork = models.ForeignKey(CheckWork, verbose_name='关联检查工作', related_name='citem_checkwork', on_delete=models.CASCADE)
risk = models.ForeignKey(Risk, verbose_name='关联风险', related_name='citem_risk', on_delete=models.SET_NULL, null=True, blank=True)
hazard = models.ForeignKey(Hazard, verbose_name='关联隐患', related_name='citem_hazard', on_delete=models.SET_NULL, null=True, blank=True)
result = models.PositiveSmallIntegerField('检查结果', default=10)
note = models.TextField('备注', null=True, blank=True)