diff --git a/apps/am/migrations/0001_initial.py b/apps/am/migrations/0001_initial.py index 804433fd..cb3e9f0e 100644 --- a/apps/am/migrations/0001_initial.py +++ b/apps/am/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models import django.utils.timezone @@ -20,7 +20,7 @@ class Migration(migrations.Migration): ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('type', models.PositiveSmallIntegerField(choices=[(10, '准入'), (20, '禁入')], verbose_name='准入类型')), - ('obj_cate', models.CharField(help_text='post/org/people', max_length=20, verbose_name='对象类型')), + ('obj_cate', models.CharField(help_text='post/org/people/visit', max_length=20, verbose_name='对象类型')), ('stay_minute_min', models.PositiveSmallIntegerField(default=0, verbose_name='最短停留时间')), ('stay_minute_max', models.PositiveSmallIntegerField(default=0, verbose_name='最长停留时间')), ('sort', models.PositiveSmallIntegerField(default=1, verbose_name='排序')), @@ -41,9 +41,7 @@ class Migration(migrations.Migration): ('level', models.PositiveSmallIntegerField(verbose_name='区域风险等级')), ('cate', models.PositiveSmallIntegerField(verbose_name='区域分类')), ('number', models.CharField(blank=True, max_length=20, null=True, verbose_name='编号')), - ('visitor_yes', models.BooleanField(default=False, verbose_name='准许访客人员')), - ('remployee_yes', models.BooleanField(default=False, verbose_name='准许相关方人员')), - ('employee_yes', models.BooleanField(default=True, verbose_name='准许内部员工')), + ('access_list', models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='准入人员类型')), ('count_people_min', models.PositiveIntegerField(default=0, verbose_name='最小人员数')), ('count_people_max', models.PositiveIntegerField(default=1000, verbose_name='最大人员数')), ('count_people', models.PositiveIntegerField(default=0, verbose_name='当前人数')), diff --git a/apps/am/migrations/0002_initial.py b/apps/am/migrations/0002_initial.py index 8b78f4e1..0858790d 100644 --- a/apps/am/migrations/0002_initial.py +++ b/apps/am/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -10,10 +10,10 @@ class Migration(migrations.Migration): initial = True dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('system', '0001_initial'), ('am', '0001_initial'), ('hrm', '0001_initial'), - ('system', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -30,7 +30,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='area', name='manager', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='区域负责人'), + 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='area', @@ -50,17 +50,17 @@ class Migration(migrations.Migration): migrations.AddField( model_name='access', name='dept', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dept', verbose_name='关联部门'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='关联部门'), ), migrations.AddField( model_name='access', name='employee', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='关联人员'), ), migrations.AddField( model_name='access', name='post', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='关联岗位'), ), migrations.AddField( model_name='access', diff --git a/apps/am/migrations/0003_alter_access_obj_cate.py b/apps/am/migrations/0003_alter_access_obj_cate.py deleted file mode 100644 index 8e8416a0..00000000 --- a/apps/am/migrations/0003_alter_access_obj_cate.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-12 08:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('am', '0002_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='access', - name='obj_cate', - field=models.CharField(help_text='post/org/people/visit', max_length=20, verbose_name='对象类型'), - ), - ] diff --git a/apps/am/migrations/0004_auto_20220713_1408.py b/apps/am/migrations/0004_auto_20220713_1408.py deleted file mode 100644 index 654c2bba..00000000 --- a/apps/am/migrations/0004_auto_20220713_1408.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 06:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('am', '0003_alter_access_obj_cate'), - ] - - operations = [ - migrations.RemoveField( - model_name='area', - name='employee_yes', - ), - migrations.RemoveField( - model_name='area', - name='remployee_yes', - ), - migrations.RemoveField( - model_name='area', - name='visitor_yes', - ), - migrations.AddField( - model_name='area', - name='access_list', - field=models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='准入人员类型'), - ), - ] diff --git a/apps/am/models.py b/apps/am/models.py index d15fcd3b..d6d66eb0 100755 --- a/apps/am/models.py +++ b/apps/am/models.py @@ -37,7 +37,7 @@ class Area(CommonBModel): stay_minute_min = models.PositiveSmallIntegerField('最短停留时间', default=0, help_text='0代表未配置') stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0, help_text='0代表未配置') is_hidden = models.BooleanField('隐藏围栏用', default=False) - manager = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='区域负责人', null=True, blank=True) + manager = models.ForeignKey(User, on_delete=models.SET_NULL, verbose_name='区域负责人', null=True, blank=True) third_info = models.JSONField('三方信息', default=dict, null=False, blank=True) @@ -60,9 +60,9 @@ class Access(CommonADModel): area = models.ForeignKey(Area, verbose_name='关联区域', on_delete=models.CASCADE) obj_cate = models.CharField('对象类型', max_length=20, help_text='post/org/people/visit') - post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.CASCADE, null=True, blank=True) - dept = models.ForeignKey(Dept, verbose_name='关联部门', on_delete=models.CASCADE, null=True, blank=True) - employee = models.ForeignKey(Employee, verbose_name='关联人员', on_delete=models.CASCADE, null=True, blank=True) + post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.SET_NULL, null=True, blank=True) + dept = models.ForeignKey(Dept, verbose_name='关联部门', on_delete=models.SET_NULL, null=True, blank=True) + employee = models.ForeignKey(Employee, verbose_name='关联人员', on_delete=models.SET_NULL, null=True, blank=True) stay_minute_min = models.PositiveSmallIntegerField('最短停留时间', default=0) stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0) sort = models.PositiveSmallIntegerField('排序', default=1) diff --git a/apps/ecm/migrations/0001_initial.py b/apps/ecm/migrations/0001_initial.py index bb9bcec7..ab830828 100644 --- a/apps/ecm/migrations/0001_initial.py +++ b/apps/ecm/migrations/0001_initial.py @@ -1,6 +1,7 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models +import django.db.models.deletion import django.utils.timezone @@ -21,9 +22,6 @@ class Migration(migrations.Migration): ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('always_on', models.BooleanField(default=True, verbose_name='始终开启')), ], - options={ - 'abstract': False, - }, ), migrations.CreateModel( name='Event', @@ -32,11 +30,16 @@ class Migration(migrations.Migration): ('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='删除标记')), + ('face_img', models.CharField(blank=True, max_length=1000, null=True, verbose_name='人脸照')), + ('global_img', models.CharField(blank=True, max_length=1000, null=True, verbose_name='全景照')), ('location', models.JSONField(blank=True, default=dict, verbose_name='事件点位坐标')), ('obj_cate', models.CharField(help_text='people(人员)/...', max_length=20, verbose_name='发生对象')), ('msg', models.TextField(blank=True, null=True, verbose_name='事件文本')), + ('voice_msg', models.TextField(blank=True, null=True, verbose_name='语音文本')), ('voice', models.TextField(blank=True, null=True, verbose_name='语音地址')), + ('is_timeout', models.BooleanField(default=False, verbose_name='是否超时')), ('mark', models.PositiveSmallIntegerField(default=10, help_text='10(正常)/20(误报)', verbose_name='事件标记')), + ('happen_time', models.DateTimeField(blank=True, null=True, verbose_name='事件发生时间')), ('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')), ('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')), ('is_pushed', models.BooleanField(default=False, verbose_name='是否已推送')), @@ -52,14 +55,17 @@ class Migration(migrations.Migration): ('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='删除标记')), - ('code', models.CharField(max_length=10, unique=True, verbose_name='标识')), + ('code', models.CharField(max_length=20, unique=True, verbose_name='标识')), ('name', models.CharField(max_length=20, unique=True, verbose_name='名称')), + ('priority', models.PositiveSmallIntegerField(default=1, help_text='1-99', verbose_name='优先级')), ('trigger', models.PositiveSmallIntegerField(choices=[(10, '监控'), (20, '定位')], default=10, verbose_name='触发方式')), ('self_algo', models.BooleanField(default=False, verbose_name='识别算法')), - ('speaker_on', models.BooleanField(default=True, verbose_name='开启音响报警')), + ('speaker_on', models.BooleanField(default=True, verbose_name='开启喇叭报警')), ('voice_person', models.PositiveSmallIntegerField(default=0, help_text='0女声3男声', verbose_name='声音选择')), - ('filter_area_level', models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定音响区域级别过滤')), + ('voice_num', models.PositiveSmallIntegerField(default=2, verbose_name='播放次数')), + ('filter_area_level', models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定喇叭区域级别过滤')), ('hanle_minute', models.PositiveSmallIntegerField(default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置', verbose_name='处理时间')), + ('same_allow_minute', models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间')), ], options={ 'abstract': False, @@ -68,10 +74,16 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Eventdo', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('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='删除标记')), ('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')), ('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')), ], + options={ + 'abstract': False, + }, ), migrations.CreateModel( name='NotifySetting', @@ -80,8 +92,8 @@ class Migration(migrations.Migration): ('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='删除标记')), - ('obj_cate', models.CharField(help_text='post岗位/user用户/var变量', max_length=20, verbose_name='提醒对象')), - ('var', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量')), + ('obj_cate', models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象')), + ('variable', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量')), ('filter_recipient', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='提醒人员过滤')), ('filter_area_level', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='区域级别过滤')), ('sms_enable', models.BooleanField(default=False, verbose_name='短信通知')), @@ -103,6 +115,8 @@ class Migration(migrations.Migration): ('msg', models.TextField(blank=True, null=True, verbose_name='推送文本')), ('is_read', models.BooleanField(default=False, verbose_name='站内信已读')), ('can_handle', models.BooleanField(default=False, verbose_name='是否可处理')), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件')), + ('notify_setting', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置')), ], options={ 'abstract': False, diff --git a/apps/ecm/migrations/0002_initial.py b/apps/ecm/migrations/0002_initial.py index 797ea5e8..2224e030 100644 --- a/apps/ecm/migrations/0002_initial.py +++ b/apps/ecm/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -10,35 +10,16 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('hrm', '0001_initial'), - ('am', '0002_initial'), + ('opm', '0001_initial'), ('third', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('ecm', '0001_initial'), + ('am', '0002_initial'), ('system', '0001_initial'), + ('hrm', '0001_initial'), ] operations = [ - migrations.AddField( - model_name='remind', - name='dept', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='部门'), - ), - migrations.AddField( - model_name='remind', - name='event', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件'), - ), - migrations.AddField( - model_name='remind', - name='notify_setting', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置'), - ), - migrations.AddField( - model_name='remind', - name='post', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='岗位'), - ), migrations.AddField( model_name='remind', name='recipient', @@ -57,7 +38,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='notifysetting', name='post', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='提醒岗位'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='提醒岗位'), ), migrations.AddField( model_name='notifysetting', @@ -67,12 +48,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='notifysetting', name='user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='提醒用户'), + 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='eventdo', name='cate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.eventcate', verbose_name='关联事件种类'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='do_cate', to='ecm.eventcate', verbose_name='关联事件种类'), ), migrations.AddField( model_name='eventdo', @@ -82,17 +63,22 @@ class Migration(migrations.Migration): migrations.AddField( model_name='eventdo', name='handle_user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人'), + 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='eventcate', name='create_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eventcate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), ), + migrations.AddField( + model_name='eventcate', + name='opl_cates', + field=models.ManyToManyField(to='opm.OplCate', verbose_name='关联许可证'), + ), migrations.AddField( model_name='eventcate', name='speakers', - field=models.ManyToManyField(blank=True, to='third.TDevice', verbose_name='固定音响'), + field=models.ManyToManyField(blank=True, related_name='ec_speakers', to='third.TDevice', verbose_name='固定喇叭'), ), migrations.AddField( model_name='eventcate', @@ -102,7 +88,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='event', name='area', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='发生区域'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='am.area', verbose_name='发生区域'), ), migrations.AddField( model_name='event', @@ -122,23 +108,28 @@ class Migration(migrations.Migration): migrations.AddField( model_name='event', name='employee', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='当事人'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='当事人'), ), migrations.AddField( model_name='event', name='handle_user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人'), + 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='event', - name='imgs', - field=models.ManyToManyField(blank=True, to='system.File', verbose_name='事件图片'), + name='opl', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='opm.opl', verbose_name='关联许可证'), ), migrations.AddField( model_name='event', name='update_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='event_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), ), + migrations.AddField( + model_name='event', + name='vchannel', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='third.tdevice', verbose_name='抓拍设备'), + ), migrations.AddField( model_name='algochannel', name='algo', @@ -149,4 +140,8 @@ class Migration(migrations.Migration): name='vchannel', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='视频通道'), ), + migrations.AlterUniqueTogether( + name='algochannel', + unique_together={('algo', 'vchannel')}, + ), ] diff --git a/apps/ecm/migrations/0003_alter_algochannel_unique_together.py b/apps/ecm/migrations/0003_alter_algochannel_unique_together.py deleted file mode 100644 index deeba754..00000000 --- a/apps/ecm/migrations/0003_alter_algochannel_unique_together.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-01 06:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0002_alter_tdevice_name'), - ('ecm', '0002_initial'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='algochannel', - unique_together={('algo', 'vchannel')}, - ), - ] diff --git a/apps/ecm/migrations/0004_auto_20220702_1025.py b/apps/ecm/migrations/0004_auto_20220702_1025.py deleted file mode 100644 index 0a82088a..00000000 --- a/apps/ecm/migrations/0004_auto_20220702_1025.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-02 02:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0003_alter_algochannel_unique_together'), - ] - - operations = [ - migrations.RemoveField( - model_name='event', - name='imgs', - ), - migrations.AddField( - model_name='event', - name='face_img', - field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='人脸照'), - ), - migrations.AddField( - model_name='event', - name='global_img', - field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='全景照'), - ), - migrations.AddField( - model_name='event', - name='is_timeout', - field=models.BooleanField(default=False, verbose_name='是否超时'), - ), - ] diff --git a/apps/ecm/migrations/0005_event_voice_msg.py b/apps/ecm/migrations/0005_event_voice_msg.py deleted file mode 100644 index 72ab57b7..00000000 --- a/apps/ecm/migrations/0005_event_voice_msg.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-02 02:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0004_auto_20220702_1025'), - ] - - operations = [ - migrations.AddField( - model_name='event', - name='voice_msg', - field=models.TextField(blank=True, null=True, verbose_name='语音文本'), - ), - ] diff --git a/apps/ecm/migrations/0006_auto_20220702_1148.py b/apps/ecm/migrations/0006_auto_20220702_1148.py deleted file mode 100644 index 6a3c3c9a..00000000 --- a/apps/ecm/migrations/0006_auto_20220702_1148.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-02 03:48 - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0005_event_voice_msg'), - ] - - operations = [ - migrations.AddField( - model_name='eventdo', - name='create_time', - field=models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间'), - ), - migrations.AddField( - model_name='eventdo', - name='is_deleted', - field=models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记'), - ), - migrations.AddField( - model_name='eventdo', - name='update_time', - field=models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间'), - ), - migrations.AlterField( - model_name='eventdo', - name='id', - field=models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID'), - ), - ] diff --git a/apps/ecm/migrations/0007_auto_20220702_1327.py b/apps/ecm/migrations/0007_auto_20220702_1327.py deleted file mode 100644 index f1321a16..00000000 --- a/apps/ecm/migrations/0007_auto_20220702_1327.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-02 05:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0006_auto_20220702_1148'), - ] - - operations = [ - migrations.RenameField( - model_name='notifysetting', - old_name='var', - new_name='variable', - ), - migrations.AlterField( - model_name='notifysetting', - name='obj_cate', - field=models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象'), - ), - ] diff --git a/apps/ecm/migrations/0008_auto_20220704_0841.py b/apps/ecm/migrations/0008_auto_20220704_0841.py deleted file mode 100644 index 8b3caf31..00000000 --- a/apps/ecm/migrations/0008_auto_20220704_0841.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-04 00:41 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0003_alter_tdevice_type'), - ('ecm', '0007_auto_20220702_1327'), - ] - - operations = [ - migrations.AddField( - model_name='event', - name='vchannel', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='抓拍设备'), - ), - migrations.AlterField( - model_name='eventcate', - name='filter_area_level', - field=models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定喇叭区域级别过滤'), - ), - migrations.AlterField( - model_name='eventcate', - name='speaker_on', - field=models.BooleanField(default=True, verbose_name='开启喇叭报警'), - ), - migrations.AlterField( - model_name='eventcate', - name='speakers', - field=models.ManyToManyField(blank=True, related_name='ec_speakers', to='third.TDevice', verbose_name='固定喇叭'), - ), - ] diff --git a/apps/ecm/migrations/0009_auto_20220704_1504.py b/apps/ecm/migrations/0009_auto_20220704_1504.py deleted file mode 100644 index ed0c842c..00000000 --- a/apps/ecm/migrations/0009_auto_20220704_1504.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-04 07:04 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0008_auto_20220704_0841'), - ] - - operations = [ - migrations.RemoveField( - model_name='remind', - name='dept', - ), - migrations.RemoveField( - model_name='remind', - name='post', - ), - migrations.AddField( - model_name='event', - name='happen_time', - field=models.DateTimeField(blank=True, null=True, verbose_name='事件发生时间'), - ), - ] diff --git a/apps/ecm/migrations/0010_auto_20220712_0855.py b/apps/ecm/migrations/0010_auto_20220712_0855.py deleted file mode 100644 index cdd57257..00000000 --- a/apps/ecm/migrations/0010_auto_20220712_0855.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-12 00:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0009_auto_20220704_1504'), - ] - - operations = [ - migrations.AddField( - model_name='eventcate', - name='priority', - field=models.PositiveSmallIntegerField(default=1, help_text='1-99', verbose_name='优先级'), - ), - migrations.AddField( - model_name='eventcate', - name='voice_num', - field=models.PositiveSmallIntegerField(default=2, verbose_name='播放次数'), - ), - ] diff --git a/apps/ecm/migrations/0011_eventcate_same_allow_minute.py b/apps/ecm/migrations/0011_eventcate_same_allow_minute.py deleted file mode 100644 index 79d69cf4..00000000 --- a/apps/ecm/migrations/0011_eventcate_same_allow_minute.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-12 05:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0010_auto_20220712_0855'), - ] - - operations = [ - migrations.AddField( - model_name='eventcate', - name='same_allow_minute', - field=models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间'), - ), - ] diff --git a/apps/ecm/migrations/0012_alter_eventdo_cate.py b/apps/ecm/migrations/0012_alter_eventdo_cate.py deleted file mode 100644 index 1c3e482f..00000000 --- a/apps/ecm/migrations/0012_alter_eventdo_cate.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 06:08 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('ecm', '0011_eventcate_same_allow_minute'), - ] - - operations = [ - migrations.AlterField( - model_name='eventdo', - name='cate', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='do_cate', to='ecm.eventcate', verbose_name='关联事件种类'), - ), - ] diff --git a/apps/ecm/migrations/0013_auto_20220810_1512.py b/apps/ecm/migrations/0013_auto_20220810_1512.py deleted file mode 100644 index a4145b8f..00000000 --- a/apps/ecm/migrations/0013_auto_20220810_1512.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.12 on 2022-08-10 07:12 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('am', '0004_auto_20220713_1408'), - ('ecm', '0012_alter_eventdo_cate'), - ] - - operations = [ - migrations.AlterField( - model_name='event', - name='area', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='发生区域'), - ), - migrations.AlterField( - model_name='eventcate', - name='code', - field=models.CharField(max_length=20, unique=True, verbose_name='标识'), - ), - ] diff --git a/apps/ecm/migrations/0014_auto_20220811_1403.py b/apps/ecm/migrations/0014_auto_20220811_1403.py deleted file mode 100644 index 1d979ce9..00000000 --- a/apps/ecm/migrations/0014_auto_20220811_1403.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.12 on 2022-08-11 06:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('opm', '0002_initial'), - ('ecm', '0013_auto_20220810_1512'), - ] - - operations = [ - migrations.AddField( - model_name='event', - name='operation', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='opm.operation', verbose_name='关联作业'), - ), - migrations.AddField( - model_name='eventcate', - name='opl_cates', - field=models.ManyToManyField(to='opm.OplCate', verbose_name='关联许可证'), - ), - ] diff --git a/apps/ecm/migrations/0015_auto_20220812_1715.py b/apps/ecm/migrations/0015_auto_20220812_1715.py deleted file mode 100644 index 6339384f..00000000 --- a/apps/ecm/migrations/0015_auto_20220812_1715.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.12 on 2022-08-12 09:15 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('opm', '0002_initial'), - ('ecm', '0014_auto_20220811_1403'), - ] - - operations = [ - migrations.RemoveField( - model_name='event', - name='operation', - ), - migrations.AddField( - model_name='event', - name='opl', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='opm.opl', verbose_name='关联许可证'), - ), - ] diff --git a/apps/ecm/models.py b/apps/ecm/models.py index b1fc1f8a..d04944bf 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -58,9 +58,9 @@ class NotifySetting(CommonADModel): event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE) obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/variable变量') post = models.ForeignKey(Post, verbose_name='提醒岗位', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) user = models.ForeignKey(User, verbose_name='提醒用户', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) variable = models.CharField('提醒变量', max_length=20, null=True, blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)') filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True) @@ -82,13 +82,13 @@ class Event(CommonBModel): cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo') face_img = models.CharField('人脸照', max_length=1000, null=True, blank=True) global_img = models.CharField('全景照', max_length=1000, null=True, blank=True) - area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE, null=True, blank=True) - vchannel = models.ForeignKey(TDevice, verbose_name='抓拍设备', on_delete=models.CASCADE, null=True, blank=True) + area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.SET_NULL, null=True, blank=True) + vchannel = models.ForeignKey(TDevice, verbose_name='抓拍设备', on_delete=models.SET_NULL, null=True, blank=True) location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True) - opl = models.ForeignKey(Opl, verbose_name='关联许可证', on_delete=models.CASCADE, null=True, blank=True) + opl = models.ForeignKey(Opl, verbose_name='关联许可证', on_delete=models.SET_NULL, null=True, blank=True) obj_cate = models.CharField('发生对象', max_length=20, help_text='people(人员)/...') employee = models.ForeignKey(Employee, verbose_name='当事人', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) msg = models.TextField('事件文本', null=True, blank=True) voice_msg = models.TextField('语音文本', null=True, blank=True) voice = models.TextField('语音地址', null=True, blank=True) @@ -97,7 +97,7 @@ class Event(CommonBModel): happen_time = models.DateTimeField('事件发生时间', null=True, blank=True) handle_time = models.DateTimeField('处理时间', null=True, blank=True) handle_user = models.ForeignKey(User, verbose_name='处理人', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) handle_desc = models.TextField('处理描述', null=True, blank=True) is_pushed = models.BooleanField('是否已推送', default=False) @@ -109,7 +109,7 @@ class Eventdo(BaseModel): on_delete=models.CASCADE) handle_time = models.DateTimeField('处理时间', null=True, blank=True) handle_user = models.ForeignKey(User, verbose_name='处理人', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) handle_desc = models.TextField('处理描述', null=True, blank=True) diff --git a/apps/hrm/filters.py b/apps/hrm/filters.py index 04798e48..2e623b6b 100755 --- a/apps/hrm/filters.py +++ b/apps/hrm/filters.py @@ -1,5 +1,5 @@ from django_filters import rest_framework as filters -from apps.hrm.models import ClockRecord, Employee, NotWorkRemark +from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark class ClockRecordFilterSet(filters.FilterSet): @@ -23,7 +23,11 @@ class EmployeeFilterSet(filters.FilterSet): class Meta: model = Employee - fields = ['job_state', 'show_atwork', 'type'] + fields = { + 'job_state': ['exact'], + 'show_atwork': ['exact'], + 'type': ['exact', 'in'] + } class NotWorkRemarkFilterSet(filters.FilterSet): @@ -39,3 +43,15 @@ class NotWorkRemarkFilterSet(filters.FilterSet): def filter_month(self, queryset, name, value): return queryset.filter(not_work_date__month=value) + + +class CertificateFilterSet(filters.FilterSet): + + class Meta: + model = Certificate + fields = { + 'employee': ['exact'], + 'employee__name': ['exact', 'contains'], + 'employee__user': ['exact'], + 'employee__type': ['exact', 'in'] + } \ No newline at end of file diff --git a/apps/hrm/migrations/0001_initial.py b/apps/hrm/migrations/0001_initial.py index 453595fa..947631a5 100644 --- a/apps/hrm/migrations/0001_initial.py +++ b/apps/hrm/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models import django.utils.timezone @@ -38,7 +38,9 @@ class Migration(migrations.Migration): ('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='删除标记')), - ('type', models.PositiveSmallIntegerField(choices=[(10, '上班打卡')], default=10, verbose_name='打卡类型')), + ('type', models.PositiveSmallIntegerField(choices=[(10, '上班打卡'), (20, '下班打卡')], default=10, verbose_name='打卡类型')), + ('trigger', models.CharField(max_length=20, verbose_name='触发')), + ('detail', models.JSONField(blank=True, default=dict, verbose_name='相关记录')), ], options={ 'abstract': False, diff --git a/apps/hrm/migrations/0002_initial.py b/apps/hrm/migrations/0002_initial.py index e6794eec..721f7401 100644 --- a/apps/hrm/migrations/0002_initial.py +++ b/apps/hrm/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -10,9 +10,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('system', '0001_initial'), ('hrm', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('system', '0001_initial'), ] operations = [ @@ -41,6 +41,11 @@ class Migration(migrations.Migration): name='create_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employee_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), ), + migrations.AddField( + model_name='employee', + name='post', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='所属岗位'), + ), migrations.AddField( model_name='employee', name='update_by', @@ -49,17 +54,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='employee', name='user', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='系统账号'), + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='employee', to=settings.AUTH_USER_MODEL, verbose_name='系统账号'), ), migrations.AddField( model_name='clockrecord', - name='create_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clockrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), - ), - migrations.AddField( - model_name='clockrecord', - name='update_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clockrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + name='employee', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='对应人员'), ), migrations.AddField( model_name='certificate', diff --git a/apps/hrm/migrations/0003_employee_post.py b/apps/hrm/migrations/0003_employee_post.py deleted file mode 100644 index 3ac4a3b6..00000000 --- a/apps/hrm/migrations/0003_employee_post.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-05 06:37 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0001_initial'), - ('hrm', '0002_initial'), - ] - - operations = [ - migrations.AddField( - model_name='employee', - name='post', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='所属岗位'), - ), - ] diff --git a/apps/hrm/migrations/0004_alter_employee_phone.py b/apps/hrm/migrations/0004_alter_employee_phone.py deleted file mode 100644 index 1909f07c..00000000 --- a/apps/hrm/migrations/0004_alter_employee_phone.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 08:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrm', '0003_employee_post'), - ] - - operations = [ - migrations.AlterField( - model_name='employee', - name='phone', - field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'), - ), - ] diff --git a/apps/hrm/migrations/0005_alter_employee_phone.py b/apps/hrm/migrations/0005_alter_employee_phone.py deleted file mode 100644 index bcdd7fe3..00000000 --- a/apps/hrm/migrations/0005_alter_employee_phone.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-28 10:58 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrm', '0004_alter_employee_phone'), - ] - - operations = [ - migrations.AlterField( - model_name='employee', - name='phone', - field=models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号'), - ), - ] diff --git a/apps/hrm/migrations/0006_auto_20220810_1512.py b/apps/hrm/migrations/0006_auto_20220810_1512.py deleted file mode 100644 index de28c761..00000000 --- a/apps/hrm/migrations/0006_auto_20220810_1512.py +++ /dev/null @@ -1,51 +0,0 @@ -# Generated by Django 3.2.12 on 2022-08-10 07:12 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('hrm', '0005_alter_employee_phone'), - ] - - operations = [ - migrations.RemoveField( - model_name='clockrecord', - name='create_by', - ), - migrations.RemoveField( - model_name='clockrecord', - name='update_by', - ), - migrations.AddField( - model_name='clockrecord', - name='detail', - field=models.JSONField(blank=True, default=dict, verbose_name='相关记录'), - ), - migrations.AddField( - model_name='clockrecord', - name='employee', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='对应人员'), - preserve_default=False, - ), - migrations.AddField( - model_name='clockrecord', - name='trigger', - field=models.CharField(default='door', max_length=20, verbose_name='触发'), - preserve_default=False, - ), - migrations.AlterField( - model_name='clockrecord', - name='type', - field=models.PositiveSmallIntegerField(choices=[(10, '上班打卡'), (20, '下班打卡')], default=10, verbose_name='打卡类型'), - ), - migrations.AlterField( - model_name='employee', - name='user', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='employee', to=settings.AUTH_USER_MODEL, verbose_name='系统账号'), - ), - ] diff --git a/apps/hrm/views.py b/apps/hrm/views.py index d998b2c3..b893fda6 100755 --- a/apps/hrm/views.py +++ b/apps/hrm/views.py @@ -10,7 +10,7 @@ from rest_framework.permissions import AllowAny from rest_framework.response import Response from apps.hrm.errors import NO_NEED_LEVEL_REMARK -from apps.hrm.filters import (ClockRecordFilterSet, EmployeeFilterSet, +from apps.hrm.filters import (CertificateFilterSet, ClockRecordFilterSet, EmployeeFilterSet, NotWorkRemarkFilterSet) from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark from apps.hrm.serializers import (CertificateCreateUpdateSerializer, CertificateSerializer, ChannelAuthoritySerializer, @@ -231,4 +231,4 @@ class CertificateViewSet(CustomModelViewSet): create_serializer_class = CertificateCreateUpdateSerializer update_serializer_class = CertificateCreateUpdateSerializer serializer_class = CertificateSerializer - filterset_fields = ['employee__user', 'employee', 'employee__type'] + filterset_class = CertificateFilterSet diff --git a/apps/monitor/migrations/0001_initial.py b/apps/monitor/migrations/0001_initial.py index b43c2601..77b5e8b1 100644 --- a/apps/monitor/migrations/0001_initial.py +++ b/apps/monitor/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models import django.utils.timezone diff --git a/apps/monitor/migrations/0002_drfrequestlog_user.py b/apps/monitor/migrations/0002_drfrequestlog_user.py index 0fc73340..5f05814d 100644 --- a/apps/monitor/migrations/0002_drfrequestlog_user.py +++ b/apps/monitor/migrations/0002_drfrequestlog_user.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models diff --git a/apps/opm/migrations/0001_initial.py b/apps/opm/migrations/0001_initial.py index e3fca14d..4d979658 100644 --- a/apps/opm/migrations/0001_initial.py +++ b/apps/opm/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models import django.db.models.deletion @@ -81,6 +81,7 @@ class Migration(migrations.Migration): ('close_note', models.PositiveSmallIntegerField(blank=True, choices=[(10, '作业正常结束'), (20, '因计划改变停止作业'), (30, '因发生异常终止作业'), (40, '其他')], help_text='正常结束/计划改变停止/发生异常停止/其他', null=True, verbose_name='作业关闭情况')), ('close_dos', models.JSONField(blank=True, default=list, verbose_name='关闭工作')), ('close_desc', models.TextField(blank=True, null=True, verbose_name='作业关闭描述')), + ('mtask_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='视频监控任务ID')), ], options={ 'abstract': False, diff --git a/apps/opm/migrations/0002_initial.py b/apps/opm/migrations/0002_initial.py index 26f487a1..6deac4d3 100644 --- a/apps/opm/migrations/0002_initial.py +++ b/apps/opm/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -11,9 +11,10 @@ class Migration(migrations.Migration): dependencies = [ ('hrm', '0002_initial'), + ('opm', '0001_initial'), + ('third', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('wf', '0001_initial'), - ('opm', '0001_initial'), ('am', '0002_initial'), ('system', '0001_initial'), ] @@ -112,7 +113,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='opl', name='ticket', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'), + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'), ), migrations.AddField( model_name='opl', @@ -134,6 +135,11 @@ class Migration(migrations.Migration): name='belong_dept', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_belong_dept', to='system.dept', verbose_name='所属部门'), ), + migrations.AddField( + model_name='operation', + name='cates', + field=models.ManyToManyField(through='opm.Opl', to='opm.OplCate'), + ), migrations.AddField( model_name='operation', name='coordinator', @@ -159,6 +165,11 @@ class Migration(migrations.Migration): name='update_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), ), + migrations.AddField( + model_name='operation', + name='vchannels', + field=models.ManyToManyField(to='third.TDevice', verbose_name='监控所用摄像头'), + ), migrations.AddField( model_name='gascheck', name='checker', diff --git a/apps/opm/migrations/0003_auto_20220812_1715.py b/apps/opm/migrations/0003_auto_20220812_1715.py deleted file mode 100644 index 8df43d89..00000000 --- a/apps/opm/migrations/0003_auto_20220812_1715.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.2.12 on 2022-08-12 09:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0009_tlog_errors'), - ('opm', '0002_initial'), - ] - - operations = [ - migrations.AddField( - model_name='operation', - name='cates', - field=models.ManyToManyField(through='opm.Opl', to='opm.OplCate'), - ), - migrations.AddField( - model_name='operation', - name='vchannels', - field=models.ManyToManyField(to='third.TDevice', verbose_name='监控所用摄像头'), - ), - migrations.AddField( - model_name='opl', - name='mtask_id', - field=models.CharField(blank=True, max_length=200, null=True, verbose_name='视频监控任务ID'), - ), - ] diff --git a/apps/opm/models.py b/apps/opm/models.py index 629987e5..4c3d7653 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -115,7 +115,7 @@ class Opl(CommonBDModel): 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.CASCADE, + on_delete=models.SET_NULL, null=True, blank=True) mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True) diff --git a/apps/rpm/migrations/0001_initial.py b/apps/rpm/migrations/0001_initial.py index c056fa7e..9b3f8d63 100644 --- a/apps/rpm/migrations/0001_initial.py +++ b/apps/rpm/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models import django.db.models.deletion diff --git a/apps/rpm/migrations/0002_initial.py b/apps/rpm/migrations/0002_initial.py index 7b96734a..5513eb18 100644 --- a/apps/rpm/migrations/0002_initial.py +++ b/apps/rpm/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -10,18 +10,18 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('rpm', '0001_initial'), ('hrm', '0002_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('wf', '0001_initial'), ('system', '0001_initial'), + ('rpm', '0001_initial'), ] operations = [ migrations.AddField( model_name='rpjfile', name='file_cate', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类'), ), migrations.AddField( model_name='rpjfile', @@ -36,7 +36,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rpjcertificate', name='rcertificate', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rcertificate', verbose_name='关联相关方证书'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rpm.rcertificate', verbose_name='关联相关方证书'), ), migrations.AddField( model_name='rpjcertificate', @@ -61,7 +61,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rpj', name='ticket', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'), ), migrations.AddField( model_name='rpj', @@ -71,7 +71,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rparty', name='admin', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), ), migrations.AddField( model_name='rparty', @@ -116,7 +116,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='remployee', name='employee', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='成员信息'), ), migrations.AddField( model_name='remployee', @@ -126,7 +126,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='remployee', name='rpj', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='最近所属相关方项目'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rpm.rpj', verbose_name='最近所属相关方项目'), ), migrations.AddField( model_name='remployee', @@ -136,7 +136,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rcertificate', name='certificate', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.certificate', verbose_name='关联认可证书'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.certificate', verbose_name='关联认可证书'), ), migrations.AddField( model_name='rcertificate', diff --git a/apps/rpm/models.py b/apps/rpm/models.py index b41c5f96..a72c8ee9 100644 --- a/apps/rpm/models.py +++ b/apps/rpm/models.py @@ -21,7 +21,7 @@ class Rparty(CommonBModel): email = models.EmailField('邮箱', null=True, blank=True) address = models.CharField('企业地址', max_length=200, null=True, blank=True) description = models.TextField('概述', null=True, blank=True) - admin = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) + admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) class Rfile(BaseModel): @@ -65,7 +65,7 @@ class Rpj(CommonBDModel): rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE) # belong_dept是业务部门可以带过来 ticket = models.ForeignKey(Ticket, verbose_name='关联工单', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) class Rpjfile(BaseModel): @@ -73,7 +73,7 @@ class Rpjfile(BaseModel): 相关方项目文件库 """ file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.CASCADE) files = models.ManyToManyField(File, verbose_name='文件', blank=True) rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE) @@ -83,13 +83,13 @@ class Remployee(CommonAModel): 相关方成员 """ employee = models.ForeignKey(Employee, verbose_name='成员信息', - on_delete=models.CASCADE, null=True, blank=True) + on_delete=models.SET_NULL, null=True, blank=True) name = models.CharField('姓名', max_length=20) phone = models.CharField('手机号', max_length=11) photo = models.CharField('证件照', max_length=1000) id_number = models.CharField('身份证号', max_length=100) rparty = models.ForeignKey(Rparty, verbose_name='所属相关方', on_delete=models.CASCADE) - rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.CASCADE, + rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.SET_NULL, null=True, blank=True) @@ -98,7 +98,7 @@ class Rcertificate(CommonAModel): 相关方证书 """ certificate = models.ForeignKey(Certificate, verbose_name='关联认可证书', - on_delete=models.CASCADE, + on_delete=models.SET_NULL, null=True, blank=True) remployee = models.ForeignKey(Remployee, verbose_name='关联相关方成员', on_delete=models.CASCADE) @@ -128,7 +128,7 @@ class Rpjcertificate(BaseModel): 相关方项目人员证书 """ rpj_member = models.ForeignKey(Rpjmember, verbose_name='关联项目成员', on_delete=models.CASCADE) - rcertificate = models.ForeignKey(Rcertificate, verbose_name='关联相关方证书', on_delete=models.CASCADE, + rcertificate = models.ForeignKey(Rcertificate, verbose_name='关联相关方证书', on_delete=models.SET_NULL, null=True, blank=True) name = models.CharField('证书名称', max_length=20) number = models.CharField('证书编号', max_length=20) diff --git a/apps/system/filters.py b/apps/system/filters.py index 141986ea..0ce89f98 100755 --- a/apps/system/filters.py +++ b/apps/system/filters.py @@ -1,8 +1,9 @@ from django_filters import rest_framework as filters -from .models import User +from .models import Dept, User class UserFilterSet(filters.FilterSet): + class Meta: model = User fields = { @@ -12,5 +13,14 @@ class UserFilterSet(filters.FilterSet): 'post': ['exact'], 'belong_dept': ['exact'], 'depts': ['exact'], - 'type': ['exact'] + 'type': ['exact', 'in'] + } + + +class DeptFilterSet(filters.FilterSet): + + class Meta: + model = Dept + fields = { + 'type': ['exact', 'in'] } diff --git a/apps/system/migrations/0001_initial.py b/apps/system/migrations/0001_initial.py index 0ccfedad..bc91b12d 100644 --- a/apps/system/migrations/0001_initial.py +++ b/apps/system/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 import apps.system.models from django.conf import settings @@ -36,8 +36,13 @@ class Migration(migrations.Migration): ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('type', models.CharField(default='employee', max_length=10, verbose_name='账号类型')), ('name', models.CharField(blank=True, max_length=20, null=True, verbose_name='姓名')), - ('phone', models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号')), + ('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')), ('avatar', models.CharField(blank=True, default='/media/default/avatar.png', max_length=100, null=True, verbose_name='头像')), + ('secret', models.CharField(blank=True, max_length=100, null=True, verbose_name='密钥')), + ('wx_openid', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信公众号OpenId')), + ('wx_nickname', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信昵称')), + ('wx_headimg', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信头像')), + ('wxmp_openid', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信小程序OpenId')), ], options={ 'verbose_name': '用户信息', @@ -158,8 +163,8 @@ class Migration(migrations.Migration): ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('data_range', models.PositiveSmallIntegerField(choices=[(10, '全部'), (30, '同级及以下'), (40, '本级及以下'), (50, '本级'), (60, '仅本人')], default=40, verbose_name='数据权限范围')), - ('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位')), - ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')), + ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位')), + ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')), ], options={ 'abstract': False, @@ -225,6 +230,11 @@ class Migration(migrations.Migration): name='groups', field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), ), + migrations.AddField( + model_name='user', + name='post', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='主要岗位'), + ), migrations.AddField( model_name='user', name='posts', diff --git a/apps/system/migrations/0002_user_post.py b/apps/system/migrations/0002_user_post.py deleted file mode 100644 index 895acff0..00000000 --- a/apps/system/migrations/0002_user_post.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-05 06:58 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='post', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='主要岗位'), - ), - ] diff --git a/apps/system/migrations/0003_alter_user_phone.py b/apps/system/migrations/0003_alter_user_phone.py deleted file mode 100644 index 22af7104..00000000 --- a/apps/system/migrations/0003_alter_user_phone.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 08:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0002_user_post'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='phone', - field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'), - ), - ] diff --git a/apps/system/migrations/0004_auto_20220724_1305.py b/apps/system/migrations/0004_auto_20220724_1305.py deleted file mode 100644 index 44f8e6b1..00000000 --- a/apps/system/migrations/0004_auto_20220724_1305.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-24 05:05 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0003_alter_user_phone'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='wx_headimg', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信头像'), - ), - migrations.AddField( - model_name='user', - name='wx_nickname', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信昵称'), - ), - migrations.AddField( - model_name='user', - name='wx_openid', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信公众号OpenId'), - ), - migrations.AddField( - model_name='user', - name='wxmp_openid', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信小程序OpenId'), - ), - ] diff --git a/apps/system/migrations/0005_alter_userpost_post.py b/apps/system/migrations/0005_alter_userpost_post.py deleted file mode 100644 index edd8c94b..00000000 --- a/apps/system/migrations/0005_alter_userpost_post.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-28 10:58 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0004_auto_20220724_1305'), - ] - - operations = [ - migrations.AlterField( - model_name='userpost', - name='post', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='up_post', to='system.post'), - ), - ] diff --git a/apps/system/migrations/0006_user_secret.py b/apps/system/migrations/0006_user_secret.py deleted file mode 100644 index 945c3a3b..00000000 --- a/apps/system/migrations/0006_user_secret.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-08-04 09:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0005_alter_userpost_post'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='secret', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='密钥'), - ), - ] diff --git a/apps/system/models.py b/apps/system/models.py index 9bdb626c..e37c9e30 100755 --- a/apps/system/models.py +++ b/apps/system/models.py @@ -105,10 +105,8 @@ class PostRole(BaseModel): """ data_range = models.PositiveSmallIntegerField('数据权限范围', choices=DataFilter.choices, default=DataFilter.THISLEVEL_AND_BELOW) - post = models.ForeignKey(Post, verbose_name='关联岗位', - on_delete=models.CASCADE, null=True, blank=True) - role = models.ForeignKey(Role, verbose_name='关联角色', - on_delete=models.CASCADE, null=True, blank=True) + post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.CASCADE) + role = models.ForeignKey(Role, verbose_name='关联角色', on_delete=models.CASCADE) class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager): @@ -126,8 +124,7 @@ class User(AbstractUser, CommonBModel): '头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True) superior = models.ForeignKey( 'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管') - post = models.ForeignKey(Post, verbose_name='主要岗位', - on_delete=models.CASCADE, + post = models.ForeignKey(Post, verbose_name='主要岗位', on_delete=models.SET_NULL, null=True, blank=True) posts = models.ManyToManyField(Post, through='system.userpost', related_name='user_posts') depts = models.ManyToManyField(Dept, through='system.userpost') @@ -157,7 +154,7 @@ class UserPost(BaseModel): """ name = models.CharField('名称', max_length=20, null=True, blank=True) user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='up_user') - post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='up_post', null=True, blank=True) + post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='up_post') dept = models.ForeignKey(Dept, on_delete=models.CASCADE, related_name='up_dept') sort = models.PositiveSmallIntegerField('排序', default=1) diff --git a/apps/system/views.py b/apps/system/views.py index 8140d87d..b96aeab1 100755 --- a/apps/system/views.py +++ b/apps/system/views.py @@ -17,7 +17,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from apps.system.errors import OLD_PASSWORD_WRONG, PASSWORD_NOT_SAME, SCHEDULE_WRONG -from apps.system.filters import UserFilterSet +from apps.system.filters import DeptFilterSet, UserFilterSet # from django_q.models import Task as QTask, Schedule as QSchedule from apps.utils.mixins import (CustomCreateModelMixin, MyLoggingMixin) from django.conf import settings @@ -317,7 +317,7 @@ class DeptViewSet(CustomModelViewSet): create_serializer_class = DeptCreateUpdateSerializer update_serializer_class = DeptCreateUpdateSerializer partial_update_serializer_class = DeptCreateUpdateSerializer - filterset_fields = ['type'] + filterset_class = DeptFilterSet search_fields = ['name'] ordering = ['type', 'sort', 'create_time'] diff --git a/apps/third/migrations/0001_initial.py b/apps/third/migrations/0001_initial.py index 856258a6..6a6203a8 100644 --- a/apps/third/migrations/0001_initial.py +++ b/apps/third/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.db import migrations, models import django.db.models.deletion @@ -31,6 +31,7 @@ class Migration(migrations.Migration): ('response', models.JSONField(blank=True, null=True)), ('method', models.CharField(max_length=10)), ('url', models.TextField(blank=True, null=True)), + ('errors', models.TextField(blank=True, null=True)), ('params', models.JSONField(blank=True, null=True)), ('body', models.JSONField(blank=True, null=True)), ], @@ -45,16 +46,33 @@ class Migration(migrations.Migration): ('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='删除标记')), - ('type', models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '音响'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型')), - ('code', models.CharField(db_index=True, max_length=50, verbose_name='设备唯一标识')), - ('name', models.CharField(max_length=50, verbose_name='设备名称')), + ('type', models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '喇叭'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型')), + ('code', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='设备唯一标识')), + ('name', models.CharField(blank=True, max_length=50, null=True, verbose_name='名称')), ('location', models.JSONField(blank=True, default=dict, verbose_name='位置信息')), ('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')), ('is_clock', models.BooleanField(default=False, verbose_name='是否打卡设备')), + ('access_list', models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='自动下发人员类型')), ('third_info', models.JSONField(blank=True, default=dict, verbose_name='三方信息')), - ('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='所在区')), + ('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='am.area', verbose_name='所在区')), ('areas', models.ManyToManyField(related_name='tareas', to='am.Area', verbose_name='覆盖区')), - ('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='绑定人员')), + ('employee', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='当前绑定人员')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='BltBind', + 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='删除标记')), + ('type', models.PositiveSmallIntegerField(choices=[(10, '绑定'), (20, '解绑')], default=10, help_text='10(绑定)/20(解绑)', verbose_name='绑定类型')), + ('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')), + ('blt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='关联标签')), + ('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员')), ], options={ 'abstract': False, diff --git a/apps/third/migrations/0002_alter_tdevice_name.py b/apps/third/migrations/0002_alter_tdevice_name.py deleted file mode 100644 index 50b89ea2..00000000 --- a/apps/third/migrations/0002_alter_tdevice_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='tdevice', - name='name', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='名称'), - ), - ] diff --git a/apps/third/migrations/0003_alter_tdevice_type.py b/apps/third/migrations/0003_alter_tdevice_type.py deleted file mode 100644 index e658ceef..00000000 --- a/apps/third/migrations/0003_alter_tdevice_type.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-02 02:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0002_alter_tdevice_name'), - ] - - operations = [ - migrations.AlterField( - model_name='tdevice', - name='type', - field=models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '喇叭'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型'), - ), - ] diff --git a/apps/third/migrations/0004_auto_20220707_0957.py b/apps/third/migrations/0004_auto_20220707_0957.py deleted file mode 100644 index f829b85e..00000000 --- a/apps/third/migrations/0004_auto_20220707_0957.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-07 01:57 - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrm', '0003_employee_post'), - ('third', '0003_alter_tdevice_type'), - ] - - operations = [ - migrations.AlterField( - model_name='tdevice', - name='code', - field=models.CharField(db_index=True, max_length=50, unique=True, verbose_name='设备唯一标识'), - ), - migrations.AlterField( - model_name='tdevice', - name='employee', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='td_employee', to='hrm.employee', verbose_name='当前绑定人员'), - ), - migrations.CreateModel( - name='BltBind', - 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='删除标记')), - ('type', models.PositiveSmallIntegerField(choices=[(10, '绑定'), (20, '解绑')], default=10, help_text='10(绑定)/20(解绑)', verbose_name='绑定类型')), - ('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')), - ('blt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='关联标签')), - ('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/third/migrations/0005_alter_tdevice_employee.py b/apps/third/migrations/0005_alter_tdevice_employee.py deleted file mode 100644 index b23ed41c..00000000 --- a/apps/third/migrations/0005_alter_tdevice_employee.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-11 02:40 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('hrm', '0003_employee_post'), - ('third', '0004_auto_20220707_0957'), - ] - - operations = [ - migrations.AlterField( - model_name='tdevice', - name='employee', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='当前绑定人员'), - ), - ] diff --git a/apps/third/migrations/0006_tdevice_door_auth_list.py b/apps/third/migrations/0006_tdevice_door_auth_list.py deleted file mode 100644 index de315c23..00000000 --- a/apps/third/migrations/0006_tdevice_door_auth_list.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-12 07:56 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0005_alter_tdevice_employee'), - ] - - operations = [ - migrations.AddField( - model_name='tdevice', - name='door_auth_list', - field=models.JSONField(blank=True, default=list, verbose_name='自动下发人员类型列表'), - ), - ] diff --git a/apps/third/migrations/0007_auto_20220712_1628.py b/apps/third/migrations/0007_auto_20220712_1628.py deleted file mode 100644 index ee329c14..00000000 --- a/apps/third/migrations/0007_auto_20220712_1628.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-12 08:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0006_tdevice_door_auth_list'), - ] - - operations = [ - migrations.RemoveField( - model_name='tdevice', - name='door_auth_list', - ), - migrations.AddField( - model_name='tdevice', - name='employee_yes', - field=models.BooleanField(default=True, verbose_name='自动下发员工'), - ), - migrations.AddField( - model_name='tdevice', - name='remployee_yes', - field=models.BooleanField(default=True, verbose_name='自动下发相关方'), - ), - migrations.AddField( - model_name='tdevice', - name='visitor_yes', - field=models.BooleanField(default=True, verbose_name='自动下发访客'), - ), - ] diff --git a/apps/third/migrations/0008_auto_20220713_1408.py b/apps/third/migrations/0008_auto_20220713_1408.py deleted file mode 100644 index 17d649e6..00000000 --- a/apps/third/migrations/0008_auto_20220713_1408.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 06:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0007_auto_20220712_1628'), - ] - - operations = [ - migrations.RemoveField( - model_name='tdevice', - name='employee_yes', - ), - migrations.RemoveField( - model_name='tdevice', - name='remployee_yes', - ), - migrations.RemoveField( - model_name='tdevice', - name='visitor_yes', - ), - migrations.AddField( - model_name='tdevice', - name='access_list', - field=models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='自动下发人员类型'), - ), - ] diff --git a/apps/third/migrations/0009_tlog_errors.py b/apps/third/migrations/0009_tlog_errors.py deleted file mode 100644 index 1c8690fd..00000000 --- a/apps/third/migrations/0009_tlog_errors.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-26 04:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('third', '0008_auto_20220713_1408'), - ] - - operations = [ - migrations.AddField( - model_name='tlog', - name='errors', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/apps/third/models.py b/apps/third/models.py index 757cd807..21dcd8a0 100755 --- a/apps/third/models.py +++ b/apps/third/models.py @@ -35,12 +35,12 @@ class TDevice(BaseModel): name = models.CharField('名称', max_length=50, null=True, blank=True) location = models.JSONField('位置信息', default=dict, null=False, blank=True) - area = models.ForeignKey(Area, on_delete=models.CASCADE, + area = models.ForeignKey(Area, on_delete=models.SET_NULL, verbose_name='所在区', null=True, blank=True) areas = models.ManyToManyField(Area, verbose_name='覆盖区', related_name='tareas') obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True) - employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.CASCADE, + employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.SET_NULL, null=True, blank=True) is_clock = models.BooleanField('是否打卡设备', default=False) access_list = models.JSONField('自动下发人员类型', default=list, null=False, blank=True, help_text='employee/remployee/visitor') diff --git a/apps/vm/migrations/0001_initial.py b/apps/vm/migrations/0001_initial.py index a219383e..0a54bccc 100644 --- a/apps/vm/migrations/0001_initial.py +++ b/apps/vm/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -11,9 +11,10 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('hrm', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('hrm', '0002_initial'), + ('wf', '0001_initial'), ('system', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -36,6 +37,7 @@ class Migration(migrations.Migration): ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_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='visit_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), ('receptionist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='接待人')), + ('ticket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单')), ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), ], options={ @@ -50,13 +52,13 @@ class Migration(migrations.Migration): ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('name', models.CharField(max_length=20, verbose_name='姓名')), - ('phone', models.CharField(max_length=11, verbose_name='手机号')), - ('photo', models.CharField(max_length=1000, verbose_name='证件照')), - ('id_number', models.CharField(max_length=100, verbose_name='身份证号')), + ('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')), + ('photo', models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照')), + ('id_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号')), ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visitor_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息')), + ('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='成员信息')), ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visitor_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ('visit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='vm.visit', verbose_name='最近所属访问项目')), + ('visit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='vm.visit', verbose_name='最近所属访问项目')), ], options={ 'abstract': False, @@ -77,4 +79,9 @@ class Migration(migrations.Migration): 'abstract': False, }, ), + migrations.AddField( + model_name='visit', + name='visitors', + field=models.ManyToManyField(related_name='v_visitors', through='vm.Vpeople', to='vm.Visitor'), + ), ] diff --git a/apps/vm/migrations/0002_visit_visitors.py b/apps/vm/migrations/0002_visit_visitors.py deleted file mode 100644 index 03ca8d76..00000000 --- a/apps/vm/migrations/0002_visit_visitors.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-07 01:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('vm', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='visit', - name='visitors', - field=models.ManyToManyField(related_name='v_visitors', through='vm.Vpeople', to='vm.Visitor'), - ), - ] diff --git a/apps/vm/migrations/0003_visit_ticket.py b/apps/vm/migrations/0003_visit_ticket.py deleted file mode 100644 index f72045e5..00000000 --- a/apps/vm/migrations/0003_visit_ticket.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-07 07:22 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0003_ticket_belong_dept'), - ('vm', '0002_visit_visitors'), - ] - - operations = [ - migrations.AddField( - model_name='visit', - name='ticket', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'), - ), - ] diff --git a/apps/vm/migrations/0004_auto_20220711_1624.py b/apps/vm/migrations/0004_auto_20220711_1624.py deleted file mode 100644 index 26f1863c..00000000 --- a/apps/vm/migrations/0004_auto_20220711_1624.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-11 08:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('vm', '0003_visit_ticket'), - ] - - operations = [ - migrations.AlterField( - model_name='visitor', - name='id_number', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号'), - ), - migrations.AlterField( - model_name='visitor', - name='phone', - field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'), - ), - migrations.AlterField( - model_name='visitor', - name='photo', - field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照'), - ), - ] diff --git a/apps/vm/models.py b/apps/vm/models.py index 550539a3..ef6b2fa8 100644 --- a/apps/vm/models.py +++ b/apps/vm/models.py @@ -52,12 +52,12 @@ class Visitor(CommonAModel): """ 访客信息 """ - employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.CASCADE, null=True, blank=True) + employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.SET_NULL, null=True, blank=True) name = models.CharField('姓名', max_length=20) phone = models.CharField('手机号', max_length=11, null=True, blank=True) photo = models.CharField('证件照', max_length=1000, null=True, blank=True) id_number = models.CharField('身份证号', max_length=100, null=True, blank=True) - visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.CASCADE, + visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.SET_NULL, null=True, blank=True) diff --git a/apps/wf/migrations/0001_initial.py b/apps/wf/migrations/0001_initial.py index 2ddfab71..8ceec417 100644 --- a/apps/wf/migrations/0001_initial.py +++ b/apps/wf/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.12 on 2022-07-01 05:11 +# Generated by Django 3.2.12 on 2022-08-15 06:02 from django.conf import settings from django.db import migrations, models @@ -11,6 +11,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('system', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] @@ -23,6 +24,7 @@ class Migration(migrations.Migration): ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('name', models.CharField(max_length=50, verbose_name='名称')), + ('key', models.CharField(blank=True, max_length=20, null=True, verbose_name='状态标识')), ('is_hidden', models.BooleanField(default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)', verbose_name='是否隐藏')), ('sort', models.IntegerField(default=0, help_text='用于工单步骤接口时,step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前', verbose_name='状态顺序')), ('type', models.IntegerField(choices=[(0, '普通'), (1, '开始'), (2, '结束')], default=0, help_text='0.普通类型 1.初始状态(用于新建工单时,获取对应的字段必填及transition信息) 2.结束状态(此状态下的工单不得再处理,即没有对应的transition)', verbose_name='状态类型')), @@ -30,16 +32,17 @@ class Migration(migrations.Migration): ('enable_deliver', models.BooleanField(default=False, verbose_name='允许转交')), ('participant_type', models.IntegerField(blank=True, choices=[(0, '无处理人'), (1, '个人'), (2, '多人'), (3, '部门'), (4, '角色'), (10, '岗位'), (6, '脚本'), (7, '工单的字段'), (9, '代码获取')], default=1, help_text='0.无处理人,1.个人,2.多人,3.部门,4.角色,5.变量(支持工单创建人,创建人的leader),6.脚本,7.工单的字段内容(如表单中的"测试负责人",需要为用户名或者逗号隔开的多个用户名),8.父工单的字段内容。 初始状态请选择类型5,参与人填create_by', verbose_name='参与者类型')), ('participant', models.JSONField(blank=True, default=list, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表\\部门id\\角色id\\变量(create_by,create_by_tl)\\脚本记录的id等,包含子工作流的需要设置处理人为loonrobot', verbose_name='参与者')), - ('state_fields', models.JSONField(default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')), + ('state_fields', models.JSONField(blank=True, default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')), ('distribute_type', models.IntegerField(choices=[(1, '主动接单'), (2, '直接处理'), (3, '随机分配'), (4, '全部处理')], default=1, help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)', verbose_name='分配方式')), - ('filter_policy', models.IntegerField(choices=[(0, '无'), (1, '和工单同属一及上级部门'), (2, '和创建人同属一及上级部门'), (3, '和上步处理人同属一及上级部门')], default=0, verbose_name='参与人过滤策略')), + ('filter_dept', models.CharField(blank=True, max_length=20, null=True, verbose_name='部门字段过滤')), ('participant_cc', models.JSONField(blank=True, default=list, help_text='抄送给(userid列表)', verbose_name='抄送给')), ('on_reach_func', models.CharField(blank=True, max_length=100, null=True, verbose_name='到达时调用方法')), ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), ], options={ - 'abstract': False, + 'verbose_name': '工作流节点', + 'verbose_name_plural': '工作流节点', }, ), migrations.CreateModel( @@ -59,6 +62,7 @@ class Migration(migrations.Migration): ('act_state', models.IntegerField(choices=[(0, '草稿中'), (1, '进行中'), (2, '被退回'), (3, '被撤回'), (4, '已完成'), (5, '已关闭')], default=1, help_text='当前工单的进行状态', verbose_name='进行状态')), ('multi_all_person', models.JSONField(blank=True, default=dict, help_text='需要当前状态处理人全部处理时实际的处理结果,json格式', verbose_name='全部处理的结果')), ('add_node_man', models.ForeignKey(blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='加签人')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_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='ticket_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='父工单')), ('parent_state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ticket_parent_state', to='wf.state', verbose_name='父工单状态')), @@ -89,7 +93,8 @@ class Migration(migrations.Migration): ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workflow_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), ], options={ - 'abstract': False, + 'verbose_name': '工作流', + 'verbose_name_plural': '工作流', }, ), migrations.CreateModel( @@ -101,7 +106,7 @@ class Migration(migrations.Migration): ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('name', models.CharField(max_length=50, verbose_name='操作')), ('timer', models.IntegerField(default=0, help_text='单位秒。处于源状态X秒后如果状态都没有过变化则自动流转到目标状态。设置时间有效', verbose_name='定时器(单位秒)')), - ('condition_expression', models.JSONField(default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', max_length=1000, verbose_name='条件表达式')), + ('condition_expression', models.JSONField(blank=True, default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', verbose_name='条件表达式')), ('attribute_type', models.IntegerField(choices=[(1, '同意'), (2, '拒绝'), (3, '其他')], default=1, help_text='属性类型,1.同意,2.拒绝,3.其他', verbose_name='属性类型')), ('field_require_check', models.BooleanField(default=True, help_text='默认在用户点击操作的时候需要校验工单表单的必填项,如果设置为否则不检查。用于如"退回"属性的操作,不需要填写表单内容', verbose_name='是否校验必填项')), ('on_submit_func', models.CharField(blank=True, max_length=100, null=True, verbose_name='提交操作调用方法')), @@ -112,7 +117,8 @@ class Migration(migrations.Migration): ('workflow', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流')), ], options={ - 'abstract': False, + 'verbose_name': '工作流流转', + 'verbose_name_plural': '工作流流转', }, ), migrations.CreateModel( @@ -131,7 +137,7 @@ class Migration(migrations.Migration): ('participant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticketflow_participant', to=settings.AUTH_USER_MODEL, verbose_name='处理人')), ('state', models.ForeignKey(blank=True, default=0, on_delete=django.db.models.deletion.CASCADE, to='wf.state', verbose_name='当前状态')), ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticketflow_ticket', to='wf.ticket', verbose_name='关联工单')), - ('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.transition', verbose_name='流转id')), + ('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.transition', verbose_name='流转id')), ], options={ 'abstract': False, diff --git a/apps/wf/migrations/0002_auto_20220707_0957.py b/apps/wf/migrations/0002_auto_20220707_0957.py deleted file mode 100644 index 11636c58..00000000 --- a/apps/wf/migrations/0002_auto_20220707_0957.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-07 01:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='state', - options={'verbose_name': '工作流节点', 'verbose_name_plural': '工作流节点'}, - ), - migrations.AlterModelOptions( - name='transition', - options={'verbose_name': '工作流流转', 'verbose_name_plural': '工作流流转'}, - ), - migrations.AlterModelOptions( - name='workflow', - options={'verbose_name': '工作流', 'verbose_name_plural': '工作流'}, - ), - migrations.AlterField( - model_name='state', - name='state_fields', - field=models.JSONField(blank=True, default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段'), - ), - migrations.AlterField( - model_name='transition', - name='condition_expression', - field=models.JSONField(blank=True, default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', verbose_name='条件表达式'), - ), - ] diff --git a/apps/wf/migrations/0003_ticket_belong_dept.py b/apps/wf/migrations/0003_ticket_belong_dept.py deleted file mode 100644 index e30c0cb3..00000000 --- a/apps/wf/migrations/0003_ticket_belong_dept.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-07 07:11 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0002_user_post'), - ('wf', '0002_auto_20220707_0957'), - ] - - operations = [ - migrations.AddField( - model_name='ticket', - name='belong_dept', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_belong_dept', to='system.dept', verbose_name='所属部门'), - ), - ] diff --git a/apps/wf/migrations/0004_auto_20220718_1344.py b/apps/wf/migrations/0004_auto_20220718_1344.py deleted file mode 100644 index 7929d9c3..00000000 --- a/apps/wf/migrations/0004_auto_20220718_1344.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-18 05:44 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0003_ticket_belong_dept'), - ] - - operations = [ - migrations.RemoveField( - model_name='state', - name='filter_policy', - ), - migrations.AddField( - model_name='state', - name='filter_dept', - field=models.CharField(default=0, max_length=20, verbose_name='部门字段过滤'), - ), - ] diff --git a/apps/wf/migrations/0005_alter_state_filter_dept.py b/apps/wf/migrations/0005_alter_state_filter_dept.py deleted file mode 100644 index bfab618b..00000000 --- a/apps/wf/migrations/0005_alter_state_filter_dept.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-18 07:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0004_auto_20220718_1344'), - ] - - operations = [ - migrations.AlterField( - model_name='state', - name='filter_dept', - field=models.CharField(blank=True, max_length=20, null=True, verbose_name='部门字段过滤'), - ), - ] diff --git a/apps/wf/migrations/0006_state_key.py b/apps/wf/migrations/0006_state_key.py deleted file mode 100644 index 07654e8d..00000000 --- a/apps/wf/migrations/0006_state_key.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-22 08:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0005_alter_state_filter_dept'), - ] - - operations = [ - migrations.AddField( - model_name='state', - name='key', - field=models.CharField(blank=True, max_length=20, null=True, verbose_name='状态标识'), - ), - ] diff --git a/apps/wf/models.py b/apps/wf/models.py index 5dc9c21f..c5079b89 100755 --- a/apps/wf/models.py +++ b/apps/wf/models.py @@ -276,7 +276,7 @@ class TicketFlow(BaseModel): """ ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单', related_name='ticketflow_ticket') transition = models.ForeignKey(Transition, verbose_name='流转id', - help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True) + help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.SET_NULL, null=True, blank=True) suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True) participant_type = models.IntegerField( '处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人等', choices=State.state_participanttype_choices) diff --git a/requirements.txt b/requirements.txt index c2056036..6a504aea 100755 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ django-cors-headers==3.11.0 django-filter==21.1 djangorestframework==3.13.1 djangorestframework-simplejwt==5.1.0 -drf-yasg==1.20.0 +drf-yasg==1.21.3 psutil==5.9.0 pillow==9.0.1 opencv-python==4.5.5.62