156 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Python
		
	
	
	
from django.db import models
 | 
						|
from apps.utils.models import CommonBModel, CommonAModel
 | 
						|
from django_celery_beat.models import PeriodicTask
 | 
						|
 | 
						|
# Create your models here.
 | 
						|
class RiskPoint(CommonBModel):
 | 
						|
    """
 | 
						|
    风险点表
 | 
						|
    """
 | 
						|
    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='hazard_user_discover', null=True, blank=True)
 | 
						|
 | 
						|
class Risk(CommonBModel):
 | 
						|
    """
 | 
						|
    风险表
 | 
						|
    """
 | 
						|
    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', null=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(CommonBModel):
 | 
						|
    """
 | 
						|
    检查任务派发设置
 | 
						|
    """
 | 
						|
    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(CommonBModel):
 | 
						|
    """
 | 
						|
    检查工作
 | 
						|
    """
 | 
						|
    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)
 | 
						|
    time_start = models.DateTimeField('开启时间')
 | 
						|
    time_end = models.DateTimeField('关闭时间')
 | 
						|
    enabled = models.BooleanField('是否可用', default=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.BooleanField('最后检查时间', default=True)
 | 
						|
    checktaskset = models.ForeignKey(CheckTaskSet, verbose_name='关联派发任务', on_delete=models.CASCADE, null=True, blank=True)
 | 
						|
 | 
						|
 | 
						|
class Hazard(CommonBModel):
 | 
						|
    """
 | 
						|
    事故隐患表
 | 
						|
    """
 | 
						|
    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, 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='整改方案', null=True, blank=True)
 | 
						|
    correct_deadline = models.DateTimeField('整改期限', null=True, blank=True)
 | 
						|
    photos = models.ManyToManyField('system.file', verbose_name='现场照片', related_name='hazard_photos', null=True)
 | 
						|
    correct_description = models.TextField('整改描述', null=True, blank=True)
 | 
						|
    photos_done = models.ManyToManyField('system.file', verbose_name='整改后照片', related_name='hazard_photos_done', null=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(CommonAModel):
 | 
						|
    """
 | 
						|
    检查工作-隐患关联表
 | 
						|
    """
 | 
						|
    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)
 |