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)