factory/apps/ecm/models.py

86 lines
4.0 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, Post, User
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('third.tdevice', verbose_name='固定音响')
filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_HOICES,
default=Area.AREA_LEVEL_1)
class PushSetting(CommonAModel):
"""
推送配置
"""
PUSH_FILTER1_CHOICES = (
(10, '当事人部门'),
(20, '当事人部门以上'),
(30, '属地部门'),
(40, '属地部门以上')
)
event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
to_field='code', on_delete=models.CASCADE)
post = models.ForeignKey(Post, verbose_name='推送岗位',
on_delete=models.CASCADE, null=True, blank=True)
filter_to_user = models.PositiveSmallIntegerField('推送人员过滤', null=True, blank=True)
filter_area_level = models.PositiveSmallIntegerField('区域级别过滤', null=True, blank=True)
sms_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='事件种类')
imgs = models.JSONField('事件图片', default=list, null=False, 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 Push(BaseModel):
"""
推送情况
"""
event = models.ForeignKey(Event, verbose_name='关联事件',
on_delete=models.CASCADE)
pusher = models.ForeignKey(User, verbose_name='推送人',
on_delete=models.CASCADE)
push_setting = models.ForeignKey(PushSetting, 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('推送文本')
is_read = models.BooleanField('站内信已读', default=False)
is_sms_send = models.BooleanField('短信已发送', default=False)
can_handle = models.BooleanField('是否可处理', default=False)
last_push_time = models.DateTimeField('最后推送时间', default=timezone.now)