factory/apps/ecm/models.py

91 lines
4.3 KiB
Python

from django.db import models
from apps.am.models import Area
from apps.hrm.models import Employee
from apps.utils.models import BaseModel, CommonAModel, CommonBModel
from apps.system.models import Dept, File, Post, User
from apps.third.models import TDevice
from django.utils import timezone
# Create your models here.
class EventCate(CommonAModel):
"""
事件种类
"""
EVENT_TRIGGER_CHOICES = (
(10, '监控'),
(20, '定位')
)
code = models.CharField('标识', max_length=10, unique=True)
name = models.CharField('名称', max_length=20, unique=True)
trigger = models.PositiveSmallIntegerField('触发方式', default=10, choices=EVENT_TRIGGER_CHOICES)
speaker_on = models.BooleanField('开启音响报警', default=True)
speakers = models.ManyToManyField(TDevice, verbose_name='固定音响', blank=True)
filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_CHOICES,
default=Area.AREA_1)
def __str__(self):
return self.name
class NotifySetting(CommonAModel):
"""
提醒配置
"""
PUSH_FILTER1_CHOICES = (
(10, '当事人部门'),
(20, '当事人部门以上'),
(30, '属地部门'),
(40, '属地部门以上')
)
event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE)
obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/var变量')
post = models.ForeignKey(Post, verbose_name='提醒岗位',
on_delete=models.CASCADE, null=True, blank=True)
user = models.ForeignKey(User, verbose_name='提醒用户',
on_delete=models.CASCADE, null=True, blank=True)
filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True)
filter_area_level = models.PositiveSmallIntegerField('区域级别过滤', null=True, blank=True)
sms_enable = models.BooleanField('短信通知', default=False)
wechat_enable = models.BooleanField('开启微信通知', default=False)
can_handle = models.BooleanField('是否可处理', default=False)
sort = models.PositiveIntegerField('排序', default=1)
class Event(CommonBModel):
"""
事件
"""
cate = models.ForeignKey(EventCate, verbose_name='事件种类', on_delete=models.CASCADE)
imgs = models.ManyToManyField(File, verbose_name='事件图片', blank=True)
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE)
location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True)
peope_type = models.CharField('当事人员类型', choices=Employee.PEOPLE_TYPE_CHOICES,
max_length=20, null=True, blank=True)
people = models.ForeignKey(Employee, verbose_name='当事人',
on_delete=models.CASCADE, 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)
handle_desc = models.TextField('处理描述', null=True, blank=True)
is_pushed = models.BooleanField('是否已推送', default=False)
class Remind(BaseModel):
"""
事件提醒表
"""
event = models.ForeignKey(Event, verbose_name='关联事件',
on_delete=models.CASCADE)
recipient = models.ForeignKey(User, verbose_name='接收人',
on_delete=models.CASCADE)
notify_setting = models.ForeignKey(NotifySetting, verbose_name='通过哪个配置',
on_delete=models.CASCADE, null=True, blank=True)
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)
msg = models.TextField('推送文本', null=True, blank=True)
is_read = models.BooleanField('站内信已读', default=False)
can_handle = models.BooleanField('是否可处理', default=False)