重新同步数据库

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

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.db import migrations, models
@ -10,10 +10,10 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0001_initial'),
('am', '0001_initial'),
('hrm', '0001_initial'),
('system', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
@ -30,7 +30,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='area',
name='manager',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='区域负责人'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='区域负责人'),
),
migrations.AddField(
model_name='area',
@ -50,17 +50,17 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='access',
name='dept',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dept', verbose_name='关联部门'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='关联部门'),
),
migrations.AddField(
model_name='access',
name='employee',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='关联人员'),
),
migrations.AddField(
model_name='access',
name='post',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='关联岗位'),
),
migrations.AddField(
model_name='access',

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

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
import django.db.models.deletion
import django.utils.timezone
@ -21,9 +22,6 @@ class Migration(migrations.Migration):
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('always_on', models.BooleanField(default=True, verbose_name='始终开启')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='Event',
@ -32,11 +30,16 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('face_img', models.CharField(blank=True, max_length=1000, null=True, verbose_name='人脸照')),
('global_img', models.CharField(blank=True, max_length=1000, null=True, verbose_name='全景照')),
('location', models.JSONField(blank=True, default=dict, verbose_name='事件点位坐标')),
('obj_cate', models.CharField(help_text='people(人员)/...', max_length=20, verbose_name='发生对象')),
('msg', models.TextField(blank=True, null=True, verbose_name='事件文本')),
('voice_msg', models.TextField(blank=True, null=True, verbose_name='语音文本')),
('voice', models.TextField(blank=True, null=True, verbose_name='语音地址')),
('is_timeout', models.BooleanField(default=False, verbose_name='是否超时')),
('mark', models.PositiveSmallIntegerField(default=10, help_text='10(正常)/20(误报)', verbose_name='事件标记')),
('happen_time', models.DateTimeField(blank=True, null=True, verbose_name='事件发生时间')),
('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
('is_pushed', models.BooleanField(default=False, verbose_name='是否已推送')),
@ -52,14 +55,17 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('code', models.CharField(max_length=10, unique=True, verbose_name='标识')),
('code', models.CharField(max_length=20, unique=True, verbose_name='标识')),
('name', models.CharField(max_length=20, unique=True, verbose_name='名称')),
('priority', models.PositiveSmallIntegerField(default=1, help_text='1-99', verbose_name='优先级')),
('trigger', models.PositiveSmallIntegerField(choices=[(10, '监控'), (20, '定位')], default=10, verbose_name='触发方式')),
('self_algo', models.BooleanField(default=False, verbose_name='识别算法')),
('speaker_on', models.BooleanField(default=True, verbose_name='开启音响报警')),
('speaker_on', models.BooleanField(default=True, verbose_name='开启喇叭报警')),
('voice_person', models.PositiveSmallIntegerField(default=0, help_text='0女声3男声', verbose_name='声音选择')),
('filter_area_level', models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定音响区域级别过滤')),
('voice_num', models.PositiveSmallIntegerField(default=2, verbose_name='播放次数')),
('filter_area_level', models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定喇叭区域级别过滤')),
('hanle_minute', models.PositiveSmallIntegerField(default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置', verbose_name='处理时间')),
('same_allow_minute', models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间')),
],
options={
'abstract': False,
@ -68,10 +74,16 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Eventdo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='NotifySetting',
@ -80,8 +92,8 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('obj_cate', models.CharField(help_text='post岗位/user用户/var变量', max_length=20, verbose_name='提醒对象')),
('var', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量')),
('obj_cate', models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象')),
('variable', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量')),
('filter_recipient', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='提醒人员过滤')),
('filter_area_level', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='区域级别过滤')),
('sms_enable', models.BooleanField(default=False, verbose_name='短信通知')),
@ -103,6 +115,8 @@ class Migration(migrations.Migration):
('msg', models.TextField(blank=True, null=True, verbose_name='推送文本')),
('is_read', models.BooleanField(default=False, verbose_name='站内信已读')),
('can_handle', models.BooleanField(default=False, verbose_name='是否可处理')),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件')),
('notify_setting', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置')),
],
options={
'abstract': False,

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.db import migrations, models
@ -10,35 +10,16 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('hrm', '0001_initial'),
('am', '0002_initial'),
('opm', '0001_initial'),
('third', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('ecm', '0001_initial'),
('am', '0002_initial'),
('system', '0001_initial'),
('hrm', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='remind',
name='dept',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='部门'),
),
migrations.AddField(
model_name='remind',
name='event',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件'),
),
migrations.AddField(
model_name='remind',
name='notify_setting',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置'),
),
migrations.AddField(
model_name='remind',
name='post',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='岗位'),
),
migrations.AddField(
model_name='remind',
name='recipient',
@ -57,7 +38,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='notifysetting',
name='post',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='提醒岗位'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='提醒岗位'),
),
migrations.AddField(
model_name='notifysetting',
@ -67,12 +48,12 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='notifysetting',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='提醒用户'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='提醒用户'),
),
migrations.AddField(
model_name='eventdo',
name='cate',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.eventcate', verbose_name='关联事件种类'),
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='do_cate', to='ecm.eventcate', verbose_name='关联事件种类'),
),
migrations.AddField(
model_name='eventdo',
@ -82,17 +63,22 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='eventdo',
name='handle_user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
),
migrations.AddField(
model_name='eventcate',
name='create_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eventcate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
),
migrations.AddField(
model_name='eventcate',
name='opl_cates',
field=models.ManyToManyField(to='opm.OplCate', verbose_name='关联许可证'),
),
migrations.AddField(
model_name='eventcate',
name='speakers',
field=models.ManyToManyField(blank=True, to='third.TDevice', verbose_name='固定音响'),
field=models.ManyToManyField(blank=True, related_name='ec_speakers', to='third.TDevice', verbose_name='固定喇叭'),
),
migrations.AddField(
model_name='eventcate',
@ -102,7 +88,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='event',
name='area',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='发生区域'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='am.area', verbose_name='发生区域'),
),
migrations.AddField(
model_name='event',
@ -122,23 +108,28 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='event',
name='employee',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='当事人'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='当事人'),
),
migrations.AddField(
model_name='event',
name='handle_user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
),
migrations.AddField(
model_name='event',
name='imgs',
field=models.ManyToManyField(blank=True, to='system.File', verbose_name='事件图片'),
name='opl',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='opm.opl', verbose_name='关联许可证'),
),
migrations.AddField(
model_name='event',
name='update_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='event_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
),
migrations.AddField(
model_name='event',
name='vchannel',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='third.tdevice', verbose_name='抓拍设备'),
),
migrations.AddField(
model_name='algochannel',
name='algo',
@ -149,4 +140,8 @@ class Migration(migrations.Migration):
name='vchannel',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='视频通道'),
),
migrations.AlterUniqueTogether(
name='algochannel',
unique_together={('algo', 'vchannel')},
),
]

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

View File

@ -1,5 +1,5 @@
from django_filters import rest_framework as filters
from apps.hrm.models import ClockRecord, Employee, NotWorkRemark
from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark
class ClockRecordFilterSet(filters.FilterSet):
@ -23,7 +23,11 @@ class EmployeeFilterSet(filters.FilterSet):
class Meta:
model = Employee
fields = ['job_state', 'show_atwork', 'type']
fields = {
'job_state': ['exact'],
'show_atwork': ['exact'],
'type': ['exact', 'in']
}
class NotWorkRemarkFilterSet(filters.FilterSet):
@ -39,3 +43,15 @@ class NotWorkRemarkFilterSet(filters.FilterSet):
def filter_month(self, queryset, name, value):
return queryset.filter(not_work_date__month=value)
class CertificateFilterSet(filters.FilterSet):
class Meta:
model = Certificate
fields = {
'employee': ['exact'],
'employee__name': ['exact', 'contains'],
'employee__user': ['exact'],
'employee__type': ['exact', 'in']
}

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
import django.utils.timezone
@ -38,7 +38,9 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('type', models.PositiveSmallIntegerField(choices=[(10, '上班打卡')], default=10, verbose_name='打卡类型')),
('type', models.PositiveSmallIntegerField(choices=[(10, '上班打卡'), (20, '下班打卡')], default=10, verbose_name='打卡类型')),
('trigger', models.CharField(max_length=20, verbose_name='触发')),
('detail', models.JSONField(blank=True, default=dict, verbose_name='相关记录')),
],
options={
'abstract': False,

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.db import migrations, models
@ -10,9 +10,9 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('system', '0001_initial'),
('hrm', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0001_initial'),
]
operations = [
@ -41,6 +41,11 @@ class Migration(migrations.Migration):
name='create_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employee_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
),
migrations.AddField(
model_name='employee',
name='post',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='所属岗位'),
),
migrations.AddField(
model_name='employee',
name='update_by',
@ -49,17 +54,12 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='employee',
name='user',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='系统账号'),
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='employee', to=settings.AUTH_USER_MODEL, verbose_name='系统账号'),
),
migrations.AddField(
model_name='clockrecord',
name='create_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clockrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
),
migrations.AddField(
model_name='clockrecord',
name='update_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clockrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
name='employee',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='对应人员'),
),
migrations.AddField(
model_name='certificate',

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

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
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.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
import django.db.models.deletion
@ -81,6 +81,7 @@ class Migration(migrations.Migration):
('close_note', models.PositiveSmallIntegerField(blank=True, choices=[(10, '作业正常结束'), (20, '因计划改变停止作业'), (30, '因发生异常终止作业'), (40, '其他')], help_text='正常结束/计划改变停止/发生异常停止/其他', null=True, verbose_name='作业关闭情况')),
('close_dos', models.JSONField(blank=True, default=list, verbose_name='关闭工作')),
('close_desc', models.TextField(blank=True, null=True, verbose_name='作业关闭描述')),
('mtask_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='视频监控任务ID')),
],
options={
'abstract': False,

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.db import migrations, models
@ -11,9 +11,10 @@ class Migration(migrations.Migration):
dependencies = [
('hrm', '0002_initial'),
('opm', '0001_initial'),
('third', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('wf', '0001_initial'),
('opm', '0001_initial'),
('am', '0002_initial'),
('system', '0001_initial'),
]
@ -112,7 +113,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='opl',
name='ticket',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'),
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'),
),
migrations.AddField(
model_name='opl',
@ -134,6 +135,11 @@ class Migration(migrations.Migration):
name='belong_dept',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_belong_dept', to='system.dept', verbose_name='所属部门'),
),
migrations.AddField(
model_name='operation',
name='cates',
field=models.ManyToManyField(through='opm.Opl', to='opm.OplCate'),
),
migrations.AddField(
model_name='operation',
name='coordinator',
@ -159,6 +165,11 @@ class Migration(migrations.Migration):
name='update_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
),
migrations.AddField(
model_name='operation',
name='vchannels',
field=models.ManyToManyField(to='third.TDevice', verbose_name='监控所用摄像头'),
),
migrations.AddField(
model_name='gascheck',
name='checker',

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_desc = models.TextField('作业关闭描述', null=True, blank=True)
ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单',
on_delete=models.CASCADE,
on_delete=models.SET_NULL,
null=True, blank=True)
mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True)

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
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.db import migrations, models
@ -10,18 +10,18 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('rpm', '0001_initial'),
('hrm', '0002_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('wf', '0001_initial'),
('system', '0001_initial'),
('rpm', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='rpjfile',
name='file_cate',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类'),
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类'),
),
migrations.AddField(
model_name='rpjfile',
@ -36,7 +36,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='rpjcertificate',
name='rcertificate',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rcertificate', verbose_name='关联相关方证书'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rpm.rcertificate', verbose_name='关联相关方证书'),
),
migrations.AddField(
model_name='rpjcertificate',
@ -61,7 +61,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='rpj',
name='ticket',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'),
),
migrations.AddField(
model_name='rpj',
@ -71,7 +71,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='rparty',
name='admin',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='rparty',
@ -116,7 +116,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='remployee',
name='employee',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='成员信息'),
),
migrations.AddField(
model_name='remployee',
@ -126,7 +126,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='remployee',
name='rpj',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='最近所属相关方项目'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rpm.rpj', verbose_name='最近所属相关方项目'),
),
migrations.AddField(
model_name='remployee',
@ -136,7 +136,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='rcertificate',
name='certificate',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.certificate', verbose_name='关联认可证书'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.certificate', verbose_name='关联认可证书'),
),
migrations.AddField(
model_name='rcertificate',

View File

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

View File

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

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
from django.conf import settings
@ -36,8 +36,13 @@ class Migration(migrations.Migration):
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('type', models.CharField(default='employee', max_length=10, verbose_name='账号类型')),
('name', models.CharField(blank=True, max_length=20, null=True, verbose_name='姓名')),
('phone', models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号')),
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
('avatar', models.CharField(blank=True, default='/media/default/avatar.png', max_length=100, null=True, verbose_name='头像')),
('secret', models.CharField(blank=True, max_length=100, null=True, verbose_name='密钥')),
('wx_openid', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信公众号OpenId')),
('wx_nickname', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信昵称')),
('wx_headimg', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信头像')),
('wxmp_openid', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信小程序OpenId')),
],
options={
'verbose_name': '用户信息',
@ -158,8 +163,8 @@ class Migration(migrations.Migration):
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('data_range', models.PositiveSmallIntegerField(choices=[(10, '全部'), (30, '同级及以下'), (40, '本级及以下'), (50, '本级'), (60, '仅本人')], default=40, verbose_name='数据权限范围')),
('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位')),
('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')),
('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位')),
('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')),
],
options={
'abstract': False,
@ -225,6 +230,11 @@ class Migration(migrations.Migration):
name='groups',
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'),
),
migrations.AddField(
model_name='user',
name='post',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='主要岗位'),
),
migrations.AddField(
model_name='user',
name='posts',

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

View File

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

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
import django.db.models.deletion
@ -31,6 +31,7 @@ class Migration(migrations.Migration):
('response', models.JSONField(blank=True, null=True)),
('method', models.CharField(max_length=10)),
('url', models.TextField(blank=True, null=True)),
('errors', models.TextField(blank=True, null=True)),
('params', models.JSONField(blank=True, null=True)),
('body', models.JSONField(blank=True, null=True)),
],
@ -45,16 +46,33 @@ class Migration(migrations.Migration):
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('type', models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '音响'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型')),
('code', models.CharField(db_index=True, max_length=50, verbose_name='设备唯一标识')),
('name', models.CharField(max_length=50, verbose_name='设备名称')),
('type', models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '喇叭'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型')),
('code', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='设备唯一标识')),
('name', models.CharField(blank=True, max_length=50, null=True, verbose_name='名称')),
('location', models.JSONField(blank=True, default=dict, verbose_name='位置信息')),
('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')),
('is_clock', models.BooleanField(default=False, verbose_name='是否打卡设备')),
('access_list', models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='自动下发人员类型')),
('third_info', models.JSONField(blank=True, default=dict, verbose_name='三方信息')),
('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='所在区')),
('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='am.area', verbose_name='所在区')),
('areas', models.ManyToManyField(related_name='tareas', to='am.Area', verbose_name='覆盖区')),
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='绑定人员')),
('employee', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='当前绑定人员')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='BltBind',
fields=[
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('type', models.PositiveSmallIntegerField(choices=[(10, '绑定'), (20, '解绑')], default=10, help_text='10(绑定)/20(解绑)', verbose_name='绑定类型')),
('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')),
('blt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='关联标签')),
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员')),
],
options={
'abstract': False,

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)
location = models.JSONField('位置信息', default=dict,
null=False, blank=True)
area = models.ForeignKey(Area, on_delete=models.CASCADE,
area = models.ForeignKey(Area, on_delete=models.SET_NULL,
verbose_name='所在区', null=True, blank=True)
areas = models.ManyToManyField(Area, verbose_name='覆盖区',
related_name='tareas')
obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True)
employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.CASCADE,
employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.SET_NULL,
null=True, blank=True)
is_clock = models.BooleanField('是否打卡设备', default=False)
access_list = models.JSONField('自动下发人员类型', default=list, null=False, blank=True, help_text='employee/remployee/visitor')

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.db import migrations, models
@ -11,9 +11,10 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('hrm', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('hrm', '0002_initial'),
('wf', '0001_initial'),
('system', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
@ -36,6 +37,7 @@ class Migration(migrations.Migration):
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('receptionist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='接待人')),
('ticket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
@ -50,13 +52,13 @@ class Migration(migrations.Migration):
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=20, verbose_name='姓名')),
('phone', models.CharField(max_length=11, verbose_name='手机号')),
('photo', models.CharField(max_length=1000, verbose_name='证件照')),
('id_number', models.CharField(max_length=100, verbose_name='身份证号')),
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
('photo', models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照')),
('id_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visitor_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息')),
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='成员信息')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visitor_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
('visit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='vm.visit', verbose_name='最近所属访问项目')),
('visit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='vm.visit', verbose_name='最近所属访问项目')),
],
options={
'abstract': False,
@ -77,4 +79,9 @@ class Migration(migrations.Migration):
'abstract': False,
},
),
migrations.AddField(
model_name='visit',
name='visitors',
field=models.ManyToManyField(related_name='v_visitors', through='vm.Vpeople', to='vm.Visitor'),
),
]

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)
phone = models.CharField('手机号', max_length=11, null=True, blank=True)
photo = models.CharField('证件照', max_length=1000, null=True, blank=True)
id_number = models.CharField('身份证号', max_length=100, null=True, blank=True)
visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.CASCADE,
visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.SET_NULL,
null=True, blank=True)

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.db import migrations, models
@ -11,6 +11,7 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('system', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
@ -23,6 +24,7 @@ class Migration(migrations.Migration):
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=50, verbose_name='名称')),
('key', models.CharField(blank=True, max_length=20, null=True, verbose_name='状态标识')),
('is_hidden', models.BooleanField(default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)', verbose_name='是否隐藏')),
('sort', models.IntegerField(default=0, help_text='用于工单步骤接口时step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前', verbose_name='状态顺序')),
('type', models.IntegerField(choices=[(0, '普通'), (1, '开始'), (2, '结束')], default=0, help_text='0.普通类型 1.初始状态(用于新建工单时,获取对应的字段必填及transition信息) 2.结束状态(此状态下的工单不得再处理即没有对应的transition)', verbose_name='状态类型')),
@ -30,16 +32,17 @@ class Migration(migrations.Migration):
('enable_deliver', models.BooleanField(default=False, verbose_name='允许转交')),
('participant_type', models.IntegerField(blank=True, choices=[(0, '无处理人'), (1, '个人'), (2, '多人'), (3, '部门'), (4, '角色'), (10, '岗位'), (6, '脚本'), (7, '工单的字段'), (9, '代码获取')], default=1, help_text='0.无处理人,1.个人,2.多人,3.部门,4.角色,5.变量(支持工单创建人,创建人的leader),6.脚本,7.工单的字段内容(如表单中的"测试负责人",需要为用户名或者逗号隔开的多个用户名),8.父工单的字段内容。 初始状态请选择类型5参与人填create_by', verbose_name='参与者类型')),
('participant', models.JSONField(blank=True, default=list, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表\\部门id\\角色id\\变量(create_by,create_by_tl)\\脚本记录的id等包含子工作流的需要设置处理人为loonrobot', verbose_name='参与者')),
('state_fields', models.JSONField(default=dict, help_text='json格式字典存储,包括读写属性1只读2必填3可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称)state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')),
('state_fields', models.JSONField(blank=True, default=dict, help_text='json格式字典存储,包括读写属性1只读2必填3可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称)state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')),
('distribute_type', models.IntegerField(choices=[(1, '主动接单'), (2, '直接处理'), (3, '随机分配'), (4, '全部处理')], default=1, help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)', verbose_name='分配方式')),
('filter_policy', models.IntegerField(choices=[(0, ''), (1, '和工单同属一及上级部门'), (2, '和创建人同属一及上级部门'), (3, '和上步处理人同属一及上级部门')], default=0, verbose_name='参与人过滤策略')),
('filter_dept', models.CharField(blank=True, max_length=20, null=True, verbose_name='部门字段过滤')),
('participant_cc', models.JSONField(blank=True, default=list, help_text='抄送给(userid列表)', verbose_name='抄送给')),
('on_reach_func', models.CharField(blank=True, max_length=100, null=True, verbose_name='到达时调用方法')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
'verbose_name': '工作流节点',
'verbose_name_plural': '工作流节点',
},
),
migrations.CreateModel(
@ -59,6 +62,7 @@ class Migration(migrations.Migration):
('act_state', models.IntegerField(choices=[(0, '草稿中'), (1, '进行中'), (2, '被退回'), (3, '被撤回'), (4, '已完成'), (5, '已关闭')], default=1, help_text='当前工单的进行状态', verbose_name='进行状态')),
('multi_all_person', models.JSONField(blank=True, default=dict, help_text='需要当前状态处理人全部处理时实际的处理结果json格式', verbose_name='全部处理的结果')),
('add_node_man', models.ForeignKey(blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='加签人')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='父工单')),
('parent_state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ticket_parent_state', to='wf.state', verbose_name='父工单状态')),
@ -89,7 +93,8 @@ class Migration(migrations.Migration):
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workflow_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
'verbose_name': '工作流',
'verbose_name_plural': '工作流',
},
),
migrations.CreateModel(
@ -101,7 +106,7 @@ class Migration(migrations.Migration):
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('name', models.CharField(max_length=50, verbose_name='操作')),
('timer', models.IntegerField(default=0, help_text='单位秒。处于源状态X秒后如果状态都没有过变化则自动流转到目标状态。设置时间有效', verbose_name='定时器(单位秒)')),
('condition_expression', models.JSONField(default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准所以多个条件不要有冲突', max_length=1000, verbose_name='条件表达式')),
('condition_expression', models.JSONField(blank=True, default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准所以多个条件不要有冲突', verbose_name='条件表达式')),
('attribute_type', models.IntegerField(choices=[(1, '同意'), (2, '拒绝'), (3, '其他')], default=1, help_text='属性类型1.同意2.拒绝3.其他', verbose_name='属性类型')),
('field_require_check', models.BooleanField(default=True, help_text='默认在用户点击操作的时候需要校验工单表单的必填项,如果设置为否则不检查。用于如"退回"属性的操作,不需要填写表单内容', verbose_name='是否校验必填项')),
('on_submit_func', models.CharField(blank=True, max_length=100, null=True, verbose_name='提交操作调用方法')),
@ -112,7 +117,8 @@ class Migration(migrations.Migration):
('workflow', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流')),
],
options={
'abstract': False,
'verbose_name': '工作流流转',
'verbose_name_plural': '工作流流转',
},
),
migrations.CreateModel(
@ -131,7 +137,7 @@ class Migration(migrations.Migration):
('participant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticketflow_participant', to=settings.AUTH_USER_MODEL, verbose_name='处理人')),
('state', models.ForeignKey(blank=True, default=0, on_delete=django.db.models.deletion.CASCADE, to='wf.state', verbose_name='当前状态')),
('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticketflow_ticket', to='wf.ticket', verbose_name='关联工单')),
('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.transition', verbose_name='流转id')),
('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.transition', verbose_name='流转id')),
],
options={
'abstract': False,

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')
transition = models.ForeignKey(Transition, verbose_name='流转id',
help_text='与worklow.Transition关联 为空时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True)
help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.SET_NULL, null=True, blank=True)
suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True)
participant_type = models.IntegerField(
'处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人等', choices=State.state_participanttype_choices)

View File

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