Files
ptools/auto_pt/models.py
2022-12-07 19:28:12 +08:00

118 lines
6.2 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Create your models here.
from django.db import models
from django.db.models.signals import pre_save, post_save
from django.dispatch import receiver
from ptools.base import BaseEntity, Trigger, PushConfig, OCRConfig
class Task(BaseEntity):
name = models.CharField(verbose_name='任务名称', max_length=32)
desc = models.CharField(verbose_name='任务描述', max_length=32)
def __str__(self):
return self.desc
class Meta:
verbose_name = '任务'
verbose_name_plural = verbose_name
ordering = ('name',)
class TaskJob(BaseEntity):
"""
trigger:    'date''interval''cron'
id:   任务的名字,不传的话会自动生成。不过为了之后对任务进行暂停、开启、删除等操作,建议给一个名字。并且是唯一的,如果多个任务取一个名字,之前的任务就会被覆盖。
args:   list 执行代码所需要的参数。
replace_existing:   默认不设置的话回导致重启项目后, 爆id已存在的错误, 设置此参数后会对已有的 id 进行覆盖从而避免报错
next_run_time  datetime 开始执行时间
misfire_grace_time:   强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了
"""
task = models.ForeignKey(verbose_name='选择任务', to=Task, on_delete=models.CASCADE,
help_text='在这里选择你要执行的任务')
name = models.CharField(verbose_name='任务名称', max_length=16,
help_text='你对任务的描述,此项具有唯一性')
job_id = models.CharField(verbose_name='任务id', max_length=16, unique=True, editable=False)
trigger = models.CharField(verbose_name='任务类型', choices=Trigger.choices, default=Trigger.cron, max_length=64)
task_exec = models.BooleanField(verbose_name='开启任务', default=True)
replace_existing = models.BooleanField(verbose_name='覆盖任务', default=True, editable=False,
help_text='不设置此项重启项目后会报任务id已存在的错误, 设置此参数后会对已有的任务进行覆盖')
expression_time = models.CharField(verbose_name='时间表达式',
help_text='在间隔任务表示间隔时长使用数字单位corn任务中为五位corn表达式“15 8 * * 2022”',
max_length=64)
start_date = models.DateTimeField(verbose_name='任务开始时间', null=True, blank=True, editable=False)
end_date = models.DateTimeField(verbose_name='任务结束时间', null=True, blank=True, editable=False)
misfire_grace_time = models.IntegerField(verbose_name='任务运行时间', default=600, editable=False,
help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了')
jitter = models.IntegerField(verbose_name='时间浮动参数', default=1200, editable=False,
help_text='增强时间随机性')
args = models.CharField(verbose_name='任务参数',
help_text='执行代码所需要的参数。默认不需要填写,有需要填写参数的任务会特别说明',
max_length=128, null=True, blank=True)
def __str__(self):
return self.task.name
class Meta:
verbose_name = '计划任务'
verbose_name_plural = verbose_name
class Notify(BaseEntity):
"""
corpid=企业ID在管理后台获取
corpsecret: 自建应用的Secret每个自建应用里都有单独的secret
agentid: 应用ID在后台应用中获取
touser: 接收者用户名(微信账号), 多个用户用 | 分割, 与发送消息的touser至少存在一个
"""
name = models.CharField(verbose_name='通知方式', choices=PushConfig.choices, default=PushConfig.wechat_work_push,
max_length=64)
enable = models.BooleanField(verbose_name='开启通知', default=True, help_text='只有开启才能发送哦!')
corpid = models.CharField(verbose_name='企业ID', max_length=64,
help_text='微信企业ID', null=True, blank=True)
corpsecret = models.CharField(verbose_name='Secret', max_length=64,
help_text='应用的Secret/Token', null=True, blank=True)
agentid = models.CharField(verbose_name='应用ID', max_length=64,
help_text='APP ID', null=True, blank=True)
touser = models.CharField(verbose_name='接收者', max_length=64,
help_text='接收者用户名/UID',
null=True, blank=True)
custom_server = models.URLField(verbose_name='服务器', null=True, blank=True,
help_text='IYuu与BARK请必填详情参考教程')
class Meta:
verbose_name = '通知推送'
verbose_name_plural = verbose_name
class OCR(BaseEntity):
"""
corpid=企业ID在管理后台获取
corpsecret: 自建应用的Secret每个自建应用里都有单独的secret
agentid: 应用ID在后台应用中获取
app_id = '2695'
api_key = 'TUoKvq3w1d'
secret_key = 'XojLDC9s5qc'
"""
name = models.CharField(verbose_name='OCR', choices=OCRConfig.choices, default=OCRConfig.baidu_aip, max_length=64)
enable = models.BooleanField(verbose_name='启用', default=False)
api_key = models.CharField(verbose_name='API-Key',
max_length=64,
null=True, blank=True)
secret_key = models.CharField(verbose_name='Secret',
max_length=64,
help_text='应用的Secret',
null=True, blank=True)
app_id = models.CharField(verbose_name='应用ID',
max_length=64,
help_text='APP ID',
null=True, blank=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'OCR识别'
verbose_name_plural = verbose_name