From d36de5bc003541592edd8f56142edaf22feccc31 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 6 Jun 2024 14:50:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=AD=A3=E5=BC=8F=E6=B7=BB=E5=8A=A0dpm?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dpm/migrations/0001_initial.py | 72 +++++++++++++++++------------ apps/dpm/migrations/0002_initial.py | 65 -------------------------- apps/dpm/models.py | 18 ++++---- apps/dpm/views.py | 1 + 4 files changed, 53 insertions(+), 103 deletions(-) delete mode 100644 apps/dpm/migrations/0002_initial.py diff --git a/apps/dpm/migrations/0001_initial.py b/apps/dpm/migrations/0001_initial.py index 395d9905..23e0d7db 100644 --- a/apps/dpm/migrations/0001_initial.py +++ b/apps/dpm/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2023-03-09 05:09 +# Generated by Django 3.2.12 on 2024-06-06 06:46 from django.conf import settings from django.db import migrations, models @@ -12,27 +12,13 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wf', '0001_initial'), ('am', '0003_alter_area_access_list'), - ('system', '0001_initial'), + ('system', '0004_auto_20240605_1011'), + ('django_celery_beat', '0016_alter_crontabschedule_timezone'), + ('wf', '0002_alter_state_filter_dept'), ] operations = [ - migrations.CreateModel( - name='CheckItem', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('check_time', models.DateTimeField(blank=True, null=True, verbose_name='检查时间')), - ('result', models.PositiveSmallIntegerField(choices=[(10, '未检查'), (20, '合格'), (30, '不合格')], default=10, verbose_name='检查结果')), - ('note', models.TextField(blank=True, null=True, verbose_name='检查备注')), - ], - options={ - 'abstract': False, - }, - ), migrations.CreateModel( name='CheckTaskSet', fields=[ @@ -44,6 +30,8 @@ class Migration(migrations.Migration): ('expire', models.PositiveSmallIntegerField(default=0, help_text='0代表不设限制直到下个任务派发', verbose_name='执行有效期(h)')), ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checktaskset_belong_dept', to='system.dept', verbose_name='所属部门')), ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checktaskset_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('myschedule', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.myschedule', verbose_name='周期')), + ('periodictask', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checktask_periodictask', to='django_celery_beat.periodictask', verbose_name='关联定时任务')), ], options={ 'abstract': False, @@ -61,12 +49,11 @@ class Migration(migrations.Migration): ('type', models.PositiveSmallIntegerField(choices=[(10, '手动'), (20, '派发')], default=10, verbose_name='任务类型')), ('time_start', models.DateTimeField(verbose_name='开启时间')), ('time_end', models.DateTimeField(verbose_name='关闭时间')), - ('enabled', models.BooleanField(default=True, verbose_name='是否可用')), ('note', models.TextField(blank=True, null=True, verbose_name='检查备注')), - ('time_check', models.BooleanField(default=True, verbose_name='最后检查时间')), + ('time_check', models.DateTimeField(blank=True, null=True, verbose_name='开始检查时间')), ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checkwork_belong_dept', to='system.dept', verbose_name='所属部门')), ('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='工作分类')), - ('checktaskset', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dpm.checktaskset', verbose_name='关联派发任务')), + ('checktaskset', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dpm.checktaskset', verbose_name='关联派发策略')), ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checkwork_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), ], options={ @@ -106,7 +93,7 @@ class Migration(migrations.Migration): ('name', models.TextField(verbose_name='项目/步骤')), ('level', models.PositiveSmallIntegerField(choices=[(10, '低风险'), (20, '一般风险'), (30, '较大风险'), (40, '重大风险')], default=10, verbose_name='风险等级')), ('standard', models.TextField(blank=True, null=True, verbose_name='检查标准')), - ('hazard', models.TextField(blank=True, null=True, verbose_name='危害因素')), + ('hazard_factors', models.TextField(blank=True, null=True, verbose_name='危害因素')), ('sort', models.PositiveSmallIntegerField(default=1, verbose_name='排序')), ('measure_tech', models.TextField(blank=True, null=True, verbose_name='工程技术措施')), ('measure_manage', models.TextField(blank=True, null=True, verbose_name='管理措施')), @@ -146,13 +133,9 @@ class Migration(migrations.Migration): ('correct_deadline', models.DateTimeField(blank=True, null=True, verbose_name='整改期限')), ('correct_description', models.TextField(blank=True, null=True, verbose_name='整改描述')), ('correct_time', models.DateTimeField(blank=True, null=True, verbose_name='整改完成时间')), - ('opinion_access', models.TextField(blank=True, null=True, verbose_name='评估意见')), - ('opinion_check', models.TextField(blank=True, null=True, verbose_name='复查意见')), - ('opinion_audit', models.TextField(blank=True, null=True, verbose_name='审核意见')), ('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='所在区域')), ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hazard_belong_dept', to='system.dept', verbose_name='所属部门')), ('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='隐患类别')), - ('checkitem', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dpm.checkitem', verbose_name='关联检查条目')), ('checkwork', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dpm.checkwork', verbose_name='关联检查工作')), ('correct_solution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.file', verbose_name='整改方案')), ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hazard_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), @@ -162,9 +145,6 @@ class Migration(migrations.Migration): ('photos_done', models.ManyToManyField(blank=True, related_name='hazard_photos_done', to='system.File', verbose_name='整改后照片')), ('ticket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hazard_ticket', to='wf.ticket', verbose_name='关联工单')), ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hazard_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ('user_access', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hazard_user_access', to=settings.AUTH_USER_MODEL, verbose_name='评估人')), - ('user_audit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hazard_user_audit', to=settings.AUTH_USER_MODEL, verbose_name='审核人')), - ('user_check', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hazard_user_check', to=settings.AUTH_USER_MODEL, verbose_name='复查人')), ('user_correct', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hazard_user_correct', to=settings.AUTH_USER_MODEL, verbose_name='整改责任人')), ('user_discover', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hazard_user_discover', to=settings.AUTH_USER_MODEL, verbose_name='发现人')), ], @@ -187,4 +167,38 @@ class Migration(migrations.Migration): name='user_duty', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='指派人'), ), + migrations.AddField( + model_name='checktaskset', + name='riskpoint', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ctask_riskpoint', to='dpm.riskpoint', verbose_name='关联风险点'), + ), + migrations.AddField( + model_name='checktaskset', + name='update_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checktaskset_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + ), + migrations.AddField( + model_name='checktaskset', + name='user_duty', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='指派人'), + ), + migrations.CreateModel( + name='CheckItem', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('result', models.PositiveSmallIntegerField(default=10, verbose_name='检查结果')), + ('note', models.TextField(blank=True, null=True, verbose_name='备注')), + ('checkwork', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='citem_checkwork', to='dpm.checkwork', verbose_name='关联检查工作')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checkitem_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('hazard', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='citem_hazard', to='dpm.hazard', verbose_name='关联隐患')), + ('risk', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='citem_risk', to='dpm.risk', verbose_name='关联风险')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checkitem_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), ] diff --git a/apps/dpm/migrations/0002_initial.py b/apps/dpm/migrations/0002_initial.py deleted file mode 100644 index ed1b4f8a..00000000 --- a/apps/dpm/migrations/0002_initial.py +++ /dev/null @@ -1,65 +0,0 @@ -# Generated by Django 3.2.12 on 2023-03-09 05:09 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('dpm', '0001_initial'), - ('system', '0002_myschedule'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('django_celery_beat', '0016_alter_crontabschedule_timezone'), - ] - - operations = [ - migrations.AddField( - model_name='checktaskset', - name='myschedule', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.myschedule', verbose_name='周期'), - ), - migrations.AddField( - model_name='checktaskset', - name='periodictask', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checktask_periodictask', to='django_celery_beat.periodictask', verbose_name='关联定时任务'), - ), - migrations.AddField( - model_name='checktaskset', - name='riskpoint', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ctask_riskpoint', to='dpm.riskpoint', verbose_name='关联风险点'), - ), - migrations.AddField( - model_name='checktaskset', - name='update_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checktaskset_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), - ), - migrations.AddField( - model_name='checktaskset', - name='user_duty', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='指派人'), - ), - migrations.AddField( - model_name='checkitem', - name='checkwork', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='citem_checkwork', to='dpm.checkwork', verbose_name='关联检查工作'), - ), - migrations.AddField( - model_name='checkitem', - name='create_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checkitem_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), - ), - migrations.AddField( - model_name='checkitem', - name='risk', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='citem_risk', to='dpm.risk', verbose_name='关联风险'), - ), - migrations.AddField( - model_name='checkitem', - name='update_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checkitem_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), - ), - ] diff --git a/apps/dpm/models.py b/apps/dpm/models.py index c7feea62..19e6c6c0 100644 --- a/apps/dpm/models.py +++ b/apps/dpm/models.py @@ -30,7 +30,7 @@ class RiskPoint(CommonBModel): 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) + user_res = models.ForeignKey('system.user', on_delete=models.CASCADE, verbose_name='责任人', related_name='riskpoint_user_res', null=True, blank=True) class Risk(CommonBModel): """ @@ -40,7 +40,7 @@ class Risk(CommonBModel): 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) + 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) @@ -80,12 +80,11 @@ class CheckWork(CommonBModel): 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) + time_check = models.DateTimeField('开始检查时间', null=True, blank=True) + checktaskset = models.ForeignKey(CheckTaskSet, verbose_name='关联派发策略', on_delete=models.CASCADE, null=True, blank=True) class Hazard(CommonBModel): @@ -110,7 +109,7 @@ class Hazard(CommonBModel): (30, '已结束') ) number = models.CharField('编号', max_length=20, null=True, blank=True) - checkwork = models.ForeignKey(CheckWork, verbose_name='关联检查工作', 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) @@ -123,11 +122,11 @@ class Hazard(CommonBModel): 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_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', null=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', null=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) @@ -153,3 +152,4 @@ class CheckItem(CommonAModel): 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) diff --git a/apps/dpm/views.py b/apps/dpm/views.py index 51c0fa30..d832c7bc 100644 --- a/apps/dpm/views.py +++ b/apps/dpm/views.py @@ -18,6 +18,7 @@ class RiskPointViewSet(CustomModelViewSet): class RiskViewSet(CustomModelViewSet): + perms_map = {"get": "*", "post": "riskpoint.update", "put": "riskpoint.update", "delete": "riskpoint.update"} queryset = Risk.objects.all() create_serializer_class = RiskCreateUpdateSerializer update_serializer_class = RiskCreateUpdateSerializer