重新同步数据库

This commit is contained in:
曹前明 2022-08-15 14:04:38 +08:00
parent 1806eb80bb
commit fb24904b6b
70 changed files with 236 additions and 1137 deletions

View File

@ -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 from django.db import migrations, models
import django.utils.timezone import django.utils.timezone
@ -20,7 +20,7 @@ class Migration(migrations.Migration):
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('type', models.PositiveSmallIntegerField(choices=[(10, '准入'), (20, '禁入')], 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_min', models.PositiveSmallIntegerField(default=0, verbose_name='最短停留时间')),
('stay_minute_max', models.PositiveSmallIntegerField(default=0, verbose_name='最长停留时间')), ('stay_minute_max', models.PositiveSmallIntegerField(default=0, verbose_name='最长停留时间')),
('sort', models.PositiveSmallIntegerField(default=1, verbose_name='排序')), ('sort', models.PositiveSmallIntegerField(default=1, verbose_name='排序')),
@ -41,9 +41,7 @@ class Migration(migrations.Migration):
('level', models.PositiveSmallIntegerField(verbose_name='区域风险等级')), ('level', models.PositiveSmallIntegerField(verbose_name='区域风险等级')),
('cate', models.PositiveSmallIntegerField(verbose_name='区域分类')), ('cate', models.PositiveSmallIntegerField(verbose_name='区域分类')),
('number', models.CharField(blank=True, max_length=20, null=True, verbose_name='编号')), ('number', models.CharField(blank=True, max_length=20, null=True, verbose_name='编号')),
('visitor_yes', models.BooleanField(default=False, verbose_name='准许访客人员')), ('access_list', models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='准入人员类型')),
('remployee_yes', models.BooleanField(default=False, verbose_name='准许相关方人员')),
('employee_yes', models.BooleanField(default=True, verbose_name='准许内部员工')),
('count_people_min', models.PositiveIntegerField(default=0, verbose_name='最小人员数')), ('count_people_min', models.PositiveIntegerField(default=0, verbose_name='最小人员数')),
('count_people_max', models.PositiveIntegerField(default=1000, verbose_name='最大人员数')), ('count_people_max', models.PositiveIntegerField(default=1000, verbose_name='最大人员数')),
('count_people', models.PositiveIntegerField(default=0, verbose_name='当前人数')), ('count_people', models.PositiveIntegerField(default=0, verbose_name='当前人数')),

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -10,10 +10,10 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0001_initial'),
('am', '0001_initial'), ('am', '0001_initial'),
('hrm', '0001_initial'), ('hrm', '0001_initial'),
('system', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
@ -30,7 +30,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='area', model_name='area',
name='manager', 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( migrations.AddField(
model_name='area', model_name='area',
@ -50,17 +50,17 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='access', model_name='access',
name='dept', 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( migrations.AddField(
model_name='access', model_name='access',
name='employee', 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( migrations.AddField(
model_name='access', model_name='access',
name='post', 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( migrations.AddField(
model_name='access', model_name='access',

View File

@ -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='对象类型'),
),
]

View File

@ -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='准入人员类型'),
),
]

View File

@ -37,7 +37,7 @@ class Area(CommonBModel):
stay_minute_min = models.PositiveSmallIntegerField('最短停留时间', default=0, help_text='0代表未配置') stay_minute_min = models.PositiveSmallIntegerField('最短停留时间', default=0, help_text='0代表未配置')
stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0, help_text='0代表未配置') stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0, help_text='0代表未配置')
is_hidden = models.BooleanField('隐藏围栏用', default=False) 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, third_info = models.JSONField('三方信息', default=dict,
null=False, blank=True) null=False, blank=True)
@ -60,9 +60,9 @@ class Access(CommonADModel):
area = models.ForeignKey(Area, verbose_name='关联区域', area = models.ForeignKey(Area, verbose_name='关联区域',
on_delete=models.CASCADE) on_delete=models.CASCADE)
obj_cate = models.CharField('对象类型', max_length=20, help_text='post/org/people/visit') 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) post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.SET_NULL, null=True, blank=True)
dept = models.ForeignKey(Dept, verbose_name='关联部门', on_delete=models.CASCADE, 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.CASCADE, 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_min = models.PositiveSmallIntegerField('最短停留时间', default=0)
stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0) stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0)
sort = models.PositiveSmallIntegerField('排序', default=1) sort = models.PositiveSmallIntegerField('排序', default=1)

View File

@ -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 from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone import django.utils.timezone
@ -21,9 +22,6 @@ class Migration(migrations.Migration):
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('always_on', models.BooleanField(default=True, verbose_name='始终开启')), ('always_on', models.BooleanField(default=True, verbose_name='始终开启')),
], ],
options={
'abstract': False,
},
), ),
migrations.CreateModel( migrations.CreateModel(
name='Event', name='Event',
@ -32,11 +30,16 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('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='事件点位坐标')), ('location', models.JSONField(blank=True, default=dict, verbose_name='事件点位坐标')),
('obj_cate', models.CharField(help_text='people(人员)/...', max_length=20, verbose_name='发生对象')), ('obj_cate', models.CharField(help_text='people(人员)/...', max_length=20, verbose_name='发生对象')),
('msg', models.TextField(blank=True, null=True, 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='语音地址')), ('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='事件标记')), ('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_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')), ('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
('is_pushed', models.BooleanField(default=False, 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='创建时间')), ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('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='名称')), ('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='触发方式')), ('trigger', models.PositiveSmallIntegerField(choices=[(10, '监控'), (20, '定位')], default=10, verbose_name='触发方式')),
('self_algo', models.BooleanField(default=False, 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='声音选择')), ('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='处理时间')), ('hanle_minute', models.PositiveSmallIntegerField(default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置', verbose_name='处理时间')),
('same_allow_minute', models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间')),
], ],
options={ options={
'abstract': False, 'abstract': False,
@ -68,10 +74,16 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Eventdo', name='Eventdo',
fields=[ 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_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')), ('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
], ],
options={
'abstract': False,
},
), ),
migrations.CreateModel( migrations.CreateModel(
name='NotifySetting', name='NotifySetting',
@ -80,8 +92,8 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('obj_cate', models.CharField(help_text='post岗位/user用户/var变量', max_length=20, verbose_name='提醒对象')), ('obj_cate', models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象')),
('var', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, 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_recipient', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='提醒人员过滤')),
('filter_area_level', 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='短信通知')), ('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='推送文本')), ('msg', models.TextField(blank=True, null=True, verbose_name='推送文本')),
('is_read', models.BooleanField(default=False, verbose_name='站内信已读')), ('is_read', models.BooleanField(default=False, verbose_name='站内信已读')),
('can_handle', 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={ options={
'abstract': False, 'abstract': False,

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -10,35 +10,16 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('opm', '0001_initial'),
('hrm', '0001_initial'),
('am', '0002_initial'),
('third', '0001_initial'), ('third', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ecm', '0001_initial'), ('ecm', '0001_initial'),
('am', '0002_initial'),
('system', '0001_initial'), ('system', '0001_initial'),
('hrm', '0001_initial'),
] ]
operations = [ 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( migrations.AddField(
model_name='remind', model_name='remind',
name='recipient', name='recipient',
@ -57,7 +38,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='notifysetting', model_name='notifysetting',
name='post', 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( migrations.AddField(
model_name='notifysetting', model_name='notifysetting',
@ -67,12 +48,12 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='notifysetting', model_name='notifysetting',
name='user', 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( migrations.AddField(
model_name='eventdo', model_name='eventdo',
name='cate', 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( migrations.AddField(
model_name='eventdo', model_name='eventdo',
@ -82,17 +63,22 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='eventdo', model_name='eventdo',
name='handle_user', 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( migrations.AddField(
model_name='eventcate', model_name='eventcate',
name='create_by', 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='创建人'), 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( migrations.AddField(
model_name='eventcate', model_name='eventcate',
name='speakers', 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( migrations.AddField(
model_name='eventcate', model_name='eventcate',
@ -102,7 +88,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='event', model_name='event',
name='area', 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( migrations.AddField(
model_name='event', model_name='event',
@ -122,23 +108,28 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='event', model_name='event',
name='employee', 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( migrations.AddField(
model_name='event', model_name='event',
name='handle_user', 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( migrations.AddField(
model_name='event', model_name='event',
name='imgs', name='opl',
field=models.ManyToManyField(blank=True, to='system.File', verbose_name='事件图片'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='opm.opl', verbose_name='关联许可证'),
), ),
migrations.AddField( migrations.AddField(
model_name='event', model_name='event',
name='update_by', 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='最后编辑人'), 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( migrations.AddField(
model_name='algochannel', model_name='algochannel',
name='algo', name='algo',
@ -149,4 +140,8 @@ class Migration(migrations.Migration):
name='vchannel', name='vchannel',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='视频通道'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='视频通道'),
), ),
migrations.AlterUniqueTogether(
name='algochannel',
unique_together={('algo', 'vchannel')},
),
] ]

View File

@ -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')},
),
]

View File

@ -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='是否超时'),
),
]

View File

@ -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='语音文本'),
),
]

View File

@ -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'),
),
]

View File

@ -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='提醒对象'),
),
]

View File

@ -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='固定喇叭'),
),
]

View File

@ -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='事件发生时间'),
),
]

View File

@ -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='播放次数'),
),
]

View File

@ -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='允许时间'),
),
]

View File

@ -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='关联事件种类'),
),
]

View File

@ -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='标识'),
),
]

View File

@ -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='关联许可证'),
),
]

View File

@ -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='关联许可证'),
),
]

View File

@ -58,9 +58,9 @@ class NotifySetting(CommonADModel):
event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE) event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE)
obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/variable变量') obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/variable变量')
post = models.ForeignKey(Post, verbose_name='提醒岗位', 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='提醒用户', 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, variable = models.CharField('提醒变量', max_length=20, null=True, blank=True,
help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)') help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)')
filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True) filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True)
@ -82,13 +82,13 @@ class Event(CommonBModel):
cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo') cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo')
face_img = models.CharField('人脸照', max_length=1000, null=True, blank=True) face_img = models.CharField('人脸照', max_length=1000, null=True, blank=True)
global_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) area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.SET_NULL, null=True, blank=True)
vchannel = models.ForeignKey(TDevice, verbose_name='抓拍设备', on_delete=models.CASCADE, 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) 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(人员)/...') obj_cate = models.CharField('发生对象', max_length=20, help_text='people(人员)/...')
employee = models.ForeignKey(Employee, verbose_name='当事人', 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) msg = models.TextField('事件文本', null=True, blank=True)
voice_msg = models.TextField('语音文本', null=True, blank=True) voice_msg = models.TextField('语音文本', null=True, blank=True)
voice = 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) happen_time = models.DateTimeField('事件发生时间', null=True, blank=True)
handle_time = models.DateTimeField('处理时间', null=True, blank=True) handle_time = models.DateTimeField('处理时间', null=True, blank=True)
handle_user = models.ForeignKey(User, verbose_name='处理人', 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) handle_desc = models.TextField('处理描述', null=True, blank=True)
is_pushed = models.BooleanField('是否已推送', default=False) is_pushed = models.BooleanField('是否已推送', default=False)
@ -109,7 +109,7 @@ class Eventdo(BaseModel):
on_delete=models.CASCADE) on_delete=models.CASCADE)
handle_time = models.DateTimeField('处理时间', null=True, blank=True) handle_time = models.DateTimeField('处理时间', null=True, blank=True)
handle_user = models.ForeignKey(User, verbose_name='处理人', 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) handle_desc = models.TextField('处理描述', null=True, blank=True)

View File

@ -1,5 +1,5 @@
from django_filters import rest_framework as filters 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): class ClockRecordFilterSet(filters.FilterSet):
@ -23,7 +23,11 @@ class EmployeeFilterSet(filters.FilterSet):
class Meta: class Meta:
model = Employee model = Employee
fields = ['job_state', 'show_atwork', 'type'] fields = {
'job_state': ['exact'],
'show_atwork': ['exact'],
'type': ['exact', 'in']
}
class NotWorkRemarkFilterSet(filters.FilterSet): class NotWorkRemarkFilterSet(filters.FilterSet):
@ -39,3 +43,15 @@ class NotWorkRemarkFilterSet(filters.FilterSet):
def filter_month(self, queryset, name, value): def filter_month(self, queryset, name, value):
return queryset.filter(not_work_date__month=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']
}

View File

@ -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 from django.db import migrations, models
import django.utils.timezone 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='创建时间')), ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('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={ options={
'abstract': False, 'abstract': False,

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -10,9 +10,9 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('system', '0001_initial'),
('hrm', '0001_initial'), ('hrm', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0001_initial'),
] ]
operations = [ operations = [
@ -41,6 +41,11 @@ class Migration(migrations.Migration):
name='create_by', 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='创建人'), 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( migrations.AddField(
model_name='employee', model_name='employee',
name='update_by', name='update_by',
@ -49,17 +54,12 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='employee', model_name='employee',
name='user', 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( migrations.AddField(
model_name='clockrecord', model_name='clockrecord',
name='create_by', name='employee',
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='创建人'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', 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='最后编辑人'),
), ),
migrations.AddField( migrations.AddField(
model_name='certificate', model_name='certificate',

View File

@ -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='所属岗位'),
),
]

View File

@ -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='手机号'),
),
]

View File

@ -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='手机号'),
),
]

View File

@ -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='系统账号'),
),
]

View File

@ -10,7 +10,7 @@ from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from apps.hrm.errors import NO_NEED_LEVEL_REMARK 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) NotWorkRemarkFilterSet)
from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark
from apps.hrm.serializers import (CertificateCreateUpdateSerializer, CertificateSerializer, ChannelAuthoritySerializer, from apps.hrm.serializers import (CertificateCreateUpdateSerializer, CertificateSerializer, ChannelAuthoritySerializer,
@ -231,4 +231,4 @@ class CertificateViewSet(CustomModelViewSet):
create_serializer_class = CertificateCreateUpdateSerializer create_serializer_class = CertificateCreateUpdateSerializer
update_serializer_class = CertificateCreateUpdateSerializer update_serializer_class = CertificateCreateUpdateSerializer
serializer_class = CertificateSerializer serializer_class = CertificateSerializer
filterset_fields = ['employee__user', 'employee', 'employee__type'] filterset_class = CertificateFilterSet

View File

@ -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 from django.db import migrations, models
import django.utils.timezone import django.utils.timezone

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models

View File

@ -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 from django.db import migrations, models
import django.db.models.deletion 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_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_dos', models.JSONField(blank=True, default=list, verbose_name='关闭工作')),
('close_desc', models.TextField(blank=True, null=True, 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={ options={
'abstract': False, 'abstract': False,

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -11,9 +11,10 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('hrm', '0002_initial'), ('hrm', '0002_initial'),
('opm', '0001_initial'),
('third', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('wf', '0001_initial'), ('wf', '0001_initial'),
('opm', '0001_initial'),
('am', '0002_initial'), ('am', '0002_initial'),
('system', '0001_initial'), ('system', '0001_initial'),
] ]
@ -112,7 +113,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='opl', model_name='opl',
name='ticket', 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( migrations.AddField(
model_name='opl', model_name='opl',
@ -134,6 +135,11 @@ class Migration(migrations.Migration):
name='belong_dept', 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='所属部门'), 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( migrations.AddField(
model_name='operation', model_name='operation',
name='coordinator', name='coordinator',
@ -159,6 +165,11 @@ class Migration(migrations.Migration):
name='update_by', 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='最后编辑人'), 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( migrations.AddField(
model_name='gascheck', model_name='gascheck',
name='checker', name='checker',

View File

@ -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'),
),
]

View File

@ -115,7 +115,7 @@ class Opl(CommonBDModel):
close_dos = models.JSONField('关闭工作', default=list, null=False, blank=True) close_dos = models.JSONField('关闭工作', default=list, null=False, blank=True)
close_desc = models.TextField('作业关闭描述', null=True, blank=True) close_desc = models.TextField('作业关闭描述', null=True, blank=True)
ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单', ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单',
on_delete=models.CASCADE, on_delete=models.SET_NULL,
null=True, blank=True) null=True, blank=True)
mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True) mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True)

View File

@ -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 from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -10,18 +10,18 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('rpm', '0001_initial'),
('hrm', '0002_initial'), ('hrm', '0002_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('wf', '0001_initial'), ('wf', '0001_initial'),
('system', '0001_initial'), ('system', '0001_initial'),
('rpm', '0001_initial'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='rpjfile', model_name='rpjfile',
name='file_cate', 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( migrations.AddField(
model_name='rpjfile', model_name='rpjfile',
@ -36,7 +36,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='rpjcertificate', model_name='rpjcertificate',
name='rcertificate', 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( migrations.AddField(
model_name='rpjcertificate', model_name='rpjcertificate',
@ -61,7 +61,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='rpj', model_name='rpj',
name='ticket', 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( migrations.AddField(
model_name='rpj', model_name='rpj',
@ -71,7 +71,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='rparty', model_name='rparty',
name='admin', 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( migrations.AddField(
model_name='rparty', model_name='rparty',
@ -116,7 +116,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='remployee', model_name='remployee',
name='employee', 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( migrations.AddField(
model_name='remployee', model_name='remployee',
@ -126,7 +126,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='remployee', model_name='remployee',
name='rpj', 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( migrations.AddField(
model_name='remployee', model_name='remployee',
@ -136,7 +136,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='rcertificate', model_name='rcertificate',
name='certificate', 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( migrations.AddField(
model_name='rcertificate', model_name='rcertificate',

View File

@ -21,7 +21,7 @@ class Rparty(CommonBModel):
email = models.EmailField('邮箱', null=True, blank=True) email = models.EmailField('邮箱', null=True, blank=True)
address = models.CharField('企业地址', max_length=200, null=True, blank=True) address = models.CharField('企业地址', max_length=200, null=True, blank=True)
description = models.TextField('概述', 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): class Rfile(BaseModel):
@ -65,7 +65,7 @@ class Rpj(CommonBDModel):
rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE) rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE)
# belong_dept是业务部门可以带过来 # belong_dept是业务部门可以带过来
ticket = models.ForeignKey(Ticket, verbose_name='关联工单', 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): class Rpjfile(BaseModel):
@ -73,7 +73,7 @@ class Rpjfile(BaseModel):
相关方项目文件库 相关方项目文件库
""" """
file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类', 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) files = models.ManyToManyField(File, verbose_name='文件', blank=True)
rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE) rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE)
@ -83,13 +83,13 @@ class Remployee(CommonAModel):
相关方成员 相关方成员
""" """
employee = models.ForeignKey(Employee, verbose_name='成员信息', 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) name = models.CharField('姓名', max_length=20)
phone = models.CharField('手机号', max_length=11) phone = models.CharField('手机号', max_length=11)
photo = models.CharField('证件照', max_length=1000) photo = models.CharField('证件照', max_length=1000)
id_number = models.CharField('身份证号', max_length=100) id_number = models.CharField('身份证号', max_length=100)
rparty = models.ForeignKey(Rparty, verbose_name='所属相关方', on_delete=models.CASCADE) 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) null=True, blank=True)
@ -98,7 +98,7 @@ class Rcertificate(CommonAModel):
相关方证书 相关方证书
""" """
certificate = models.ForeignKey(Certificate, verbose_name='关联认可证书', certificate = models.ForeignKey(Certificate, verbose_name='关联认可证书',
on_delete=models.CASCADE, on_delete=models.SET_NULL,
null=True, blank=True) null=True, blank=True)
remployee = models.ForeignKey(Remployee, verbose_name='关联相关方成员', remployee = models.ForeignKey(Remployee, verbose_name='关联相关方成员',
on_delete=models.CASCADE) on_delete=models.CASCADE)
@ -128,7 +128,7 @@ class Rpjcertificate(BaseModel):
相关方项目人员证书 相关方项目人员证书
""" """
rpj_member = models.ForeignKey(Rpjmember, verbose_name='关联项目成员', on_delete=models.CASCADE) 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) null=True, blank=True)
name = models.CharField('证书名称', max_length=20) name = models.CharField('证书名称', max_length=20)
number = models.CharField('证书编号', max_length=20) number = models.CharField('证书编号', max_length=20)

View File

@ -1,8 +1,9 @@
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from .models import User from .models import Dept, User
class UserFilterSet(filters.FilterSet): class UserFilterSet(filters.FilterSet):
class Meta: class Meta:
model = User model = User
fields = { fields = {
@ -12,5 +13,14 @@ class UserFilterSet(filters.FilterSet):
'post': ['exact'], 'post': ['exact'],
'belong_dept': ['exact'], 'belong_dept': ['exact'],
'depts': ['exact'], 'depts': ['exact'],
'type': ['exact'] 'type': ['exact', 'in']
}
class DeptFilterSet(filters.FilterSet):
class Meta:
model = Dept
fields = {
'type': ['exact', 'in']
} }

View File

@ -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 import apps.system.models
from django.conf import settings from django.conf import settings
@ -36,8 +36,13 @@ class Migration(migrations.Migration):
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('type', models.CharField(default='employee', max_length=10, verbose_name='账号类型')), ('type', models.CharField(default='employee', max_length=10, verbose_name='账号类型')),
('name', models.CharField(blank=True, max_length=20, null=True, 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='头像')), ('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={ options={
'verbose_name': '用户信息', 'verbose_name': '用户信息',
@ -158,8 +163,8 @@ class Migration(migrations.Migration):
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('data_range', models.PositiveSmallIntegerField(choices=[(10, '全部'), (30, '同级及以下'), (40, '本级及以下'), (50, '本级'), (60, '仅本人')], default=40, 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='关联岗位')), ('post', models.ForeignKey(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='关联角色')), ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')),
], ],
options={ options={
'abstract': False, 'abstract': False,
@ -225,6 +230,11 @@ class Migration(migrations.Migration):
name='groups', 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'), 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( migrations.AddField(
model_name='user', model_name='user',
name='posts', name='posts',

View File

@ -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='主要岗位'),
),
]

View File

@ -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='手机号'),
),
]

View File

@ -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'),
),
]

View File

@ -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'),
),
]

View File

@ -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='密钥'),
),
]

View File

@ -105,10 +105,8 @@ class PostRole(BaseModel):
""" """
data_range = models.PositiveSmallIntegerField('数据权限范围', choices=DataFilter.choices, data_range = models.PositiveSmallIntegerField('数据权限范围', choices=DataFilter.choices,
default=DataFilter.THISLEVEL_AND_BELOW) default=DataFilter.THISLEVEL_AND_BELOW)
post = models.ForeignKey(Post, verbose_name='关联岗位', post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.CASCADE)
on_delete=models.CASCADE, null=True, blank=True) role = models.ForeignKey(Role, verbose_name='关联角色', on_delete=models.CASCADE)
role = models.ForeignKey(Role, verbose_name='关联角色',
on_delete=models.CASCADE, null=True, blank=True)
class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager): class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager):
@ -126,8 +124,7 @@ class User(AbstractUser, CommonBModel):
'头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True) '头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True)
superior = models.ForeignKey( superior = models.ForeignKey(
'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管') 'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管')
post = models.ForeignKey(Post, verbose_name='主要岗位', post = models.ForeignKey(Post, verbose_name='主要岗位', on_delete=models.SET_NULL,
on_delete=models.CASCADE,
null=True, blank=True) null=True, blank=True)
posts = models.ManyToManyField(Post, through='system.userpost', related_name='user_posts') posts = models.ManyToManyField(Post, through='system.userpost', related_name='user_posts')
depts = models.ManyToManyField(Dept, through='system.userpost') depts = models.ManyToManyField(Dept, through='system.userpost')
@ -157,7 +154,7 @@ class UserPost(BaseModel):
""" """
name = models.CharField('名称', max_length=20, null=True, blank=True) name = models.CharField('名称', max_length=20, null=True, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='up_user') 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') dept = models.ForeignKey(Dept, on_delete=models.CASCADE, related_name='up_dept')
sort = models.PositiveSmallIntegerField('排序', default=1) sort = models.PositiveSmallIntegerField('排序', default=1)

View File

@ -17,7 +17,7 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from apps.system.errors import OLD_PASSWORD_WRONG, PASSWORD_NOT_SAME, SCHEDULE_WRONG 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 django_q.models import Task as QTask, Schedule as QSchedule
from apps.utils.mixins import (CustomCreateModelMixin, MyLoggingMixin) from apps.utils.mixins import (CustomCreateModelMixin, MyLoggingMixin)
from django.conf import settings from django.conf import settings
@ -317,7 +317,7 @@ class DeptViewSet(CustomModelViewSet):
create_serializer_class = DeptCreateUpdateSerializer create_serializer_class = DeptCreateUpdateSerializer
update_serializer_class = DeptCreateUpdateSerializer update_serializer_class = DeptCreateUpdateSerializer
partial_update_serializer_class = DeptCreateUpdateSerializer partial_update_serializer_class = DeptCreateUpdateSerializer
filterset_fields = ['type'] filterset_class = DeptFilterSet
search_fields = ['name'] search_fields = ['name']
ordering = ['type', 'sort', 'create_time'] ordering = ['type', 'sort', 'create_time']

View File

@ -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 from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
@ -31,6 +31,7 @@ class Migration(migrations.Migration):
('response', models.JSONField(blank=True, null=True)), ('response', models.JSONField(blank=True, null=True)),
('method', models.CharField(max_length=10)), ('method', models.CharField(max_length=10)),
('url', models.TextField(blank=True, null=True)), ('url', models.TextField(blank=True, null=True)),
('errors', models.TextField(blank=True, null=True)),
('params', models.JSONField(blank=True, null=True)), ('params', models.JSONField(blank=True, null=True)),
('body', 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='创建时间')), ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('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='设备类型')), ('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='设备唯一标识')), ('code', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='设备唯一标识')),
('name', models.CharField(max_length=50, verbose_name='设备名称')), ('name', models.CharField(blank=True, max_length=50, null=True, verbose_name='名称')),
('location', models.JSONField(blank=True, default=dict, 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='绑定对象')), ('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')),
('is_clock', models.BooleanField(default=False, 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='三方信息')), ('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='覆盖区')), ('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={ options={
'abstract': False, 'abstract': False,

View File

@ -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='名称'),
),
]

View File

@ -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='设备类型'),
),
]

View File

@ -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,
},
),
]

View File

@ -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='当前绑定人员'),
),
]

View File

@ -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='自动下发人员类型列表'),
),
]

View File

@ -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='自动下发访客'),
),
]

View File

@ -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='自动下发人员类型'),
),
]

View File

@ -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),
),
]

View File

@ -35,12 +35,12 @@ class TDevice(BaseModel):
name = models.CharField('名称', max_length=50, null=True, blank=True) name = models.CharField('名称', max_length=50, null=True, blank=True)
location = models.JSONField('位置信息', default=dict, location = models.JSONField('位置信息', default=dict,
null=False, blank=True) 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) verbose_name='所在区', null=True, blank=True)
areas = models.ManyToManyField(Area, verbose_name='覆盖区', areas = models.ManyToManyField(Area, verbose_name='覆盖区',
related_name='tareas') related_name='tareas')
obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True) 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) null=True, blank=True)
is_clock = models.BooleanField('是否打卡设备', default=False) is_clock = models.BooleanField('是否打卡设备', default=False)
access_list = models.JSONField('自动下发人员类型', default=list, null=False, blank=True, help_text='employee/remployee/visitor') access_list = models.JSONField('自动下发人员类型', default=list, null=False, blank=True, help_text='employee/remployee/visitor')

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -11,9 +11,10 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('hrm', '0001_initial'), ('hrm', '0002_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('wf', '0001_initial'),
('system', '0001_initial'), ('system', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ 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='所属部门')), ('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='创建人')), ('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='接待人')), ('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='最后编辑人')), ('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={ options={
@ -50,13 +52,13 @@ class Migration(migrations.Migration):
('update_time', models.DateTimeField(auto_now=True, 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='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=20, verbose_name='姓名')), ('name', models.CharField(max_length=20, verbose_name='姓名')),
('phone', models.CharField(max_length=11, verbose_name='手机号')), ('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
('photo', models.CharField(max_length=1000, verbose_name='证件照')), ('photo', models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照')),
('id_number', models.CharField(max_length=100, 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='创建人')), ('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='最后编辑人')), ('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={ options={
'abstract': False, 'abstract': False,
@ -77,4 +79,9 @@ class Migration(migrations.Migration):
'abstract': False, 'abstract': False,
}, },
), ),
migrations.AddField(
model_name='visit',
name='visitors',
field=models.ManyToManyField(related_name='v_visitors', through='vm.Vpeople', to='vm.Visitor'),
),
] ]

View File

@ -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'),
),
]

View File

@ -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='关联工单'),
),
]

View File

@ -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='证件照'),
),
]

View File

@ -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) name = models.CharField('姓名', max_length=20)
phone = models.CharField('手机号', max_length=11, null=True, blank=True) phone = models.CharField('手机号', max_length=11, null=True, blank=True)
photo = models.CharField('证件照', max_length=1000, 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) 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) null=True, blank=True)

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -11,6 +11,7 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('system', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), 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='修改时间')), ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=50, 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='是否隐藏')), ('is_hidden', models.BooleanField(default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)', verbose_name='是否隐藏')),
('sort', models.IntegerField(default=0, help_text='用于工单步骤接口时step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前', 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='状态类型')), ('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='允许转交')), ('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_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='参与者')), ('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='分配方式')), ('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='抄送给')), ('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='到达时调用方法')), ('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='创建人')), ('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='最后编辑人')), ('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={ options={
'abstract': False, 'verbose_name': '工作流节点',
'verbose_name_plural': '工作流节点',
}, },
), ),
migrations.CreateModel( 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='进行状态')), ('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='全部处理的结果')), ('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='加签人')), ('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='创建人')), ('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', 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='父工单状态')), ('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='最后编辑人')), ('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={ options={
'abstract': False, 'verbose_name': '工作流',
'verbose_name_plural': '工作流',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
@ -101,7 +106,7 @@ class Migration(migrations.Migration):
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=50, verbose_name='操作')), ('name', models.CharField(max_length=50, verbose_name='操作')),
('timer', models.IntegerField(default=0, help_text='单位秒。处于源状态X秒后如果状态都没有过变化则自动流转到目标状态。设置时间有效', 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='属性类型')), ('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='是否校验必填项')), ('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='提交操作调用方法')), ('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='所属工作流')), ('workflow', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流')),
], ],
options={ options={
'abstract': False, 'verbose_name': '工作流流转',
'verbose_name_plural': '工作流流转',
}, },
), ),
migrations.CreateModel( 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='处理人')), ('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='当前状态')), ('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='关联工单')), ('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={ options={
'abstract': False, 'abstract': False,

View File

@ -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='条件表达式'),
),
]

View File

@ -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='所属部门'),
),
]

View File

@ -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='部门字段过滤'),
),
]

View File

@ -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='部门字段过滤'),
),
]

View File

@ -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='状态标识'),
),
]

View File

@ -276,7 +276,7 @@ class TicketFlow(BaseModel):
""" """
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单', related_name='ticketflow_ticket') ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单', related_name='ticketflow_ticket')
transition = models.ForeignKey(Transition, verbose_name='流转id', 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) suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True)
participant_type = models.IntegerField( participant_type = models.IntegerField(
'处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人等', choices=State.state_participanttype_choices) '处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人等', choices=State.state_participanttype_choices)

View File

@ -6,7 +6,7 @@ django-cors-headers==3.11.0
django-filter==21.1 django-filter==21.1
djangorestframework==3.13.1 djangorestframework==3.13.1
djangorestframework-simplejwt==5.1.0 djangorestframework-simplejwt==5.1.0
drf-yasg==1.20.0 drf-yasg==1.21.3
psutil==5.9.0 psutil==5.9.0
pillow==9.0.1 pillow==9.0.1
opencv-python==4.5.5.62 opencv-python==4.5.5.62