trigger.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:niu
  5. @file: trigger.py.py
  6. @date:2026/1/9 15:33
  7. @desc:
  8. """
  9. import uuid_utils.compat as uuid
  10. from django.db import models
  11. from common.encoder.encoder import SystemEncoder
  12. from common.mixins.app_model_mixin import AppModelMixin
  13. from knowledge.models.knowledge_action import State
  14. from users.models import User
  15. class TriggerTypeChoices(models.TextChoices):
  16. SCHEDULED = 'SCHEDULED'
  17. EVENT = 'EVENT'
  18. class TriggerTaskTypeChoices(models.TextChoices):
  19. APPLICATION = 'APPLICATION'
  20. TOOL = 'TOOL'
  21. class Trigger(AppModelMixin):
  22. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  23. workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True)
  24. name = models.CharField(max_length=128, verbose_name="触发器名称", db_index=True)
  25. desc = models.CharField(max_length=512, verbose_name="引用描述", default="")
  26. trigger_type = models.CharField(verbose_name="触发器类型", choices=TriggerTypeChoices.choices,
  27. default=TriggerTypeChoices.SCHEDULED, max_length=256)
  28. trigger_setting = models.JSONField(default=dict)
  29. meta = models.JSONField(default=dict)
  30. is_active = models.BooleanField(default=True, db_index=True)
  31. user = models.ForeignKey(User, on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True)
  32. class Meta:
  33. db_table = "event_trigger"
  34. class TriggerTask(AppModelMixin):
  35. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  36. trigger = models.ForeignKey(Trigger, on_delete=models.CASCADE)
  37. source_type = models.CharField(verbose_name="触发器任务类型", choices=TriggerTaskTypeChoices.choices,
  38. default=TriggerTaskTypeChoices.APPLICATION, max_length=256
  39. )
  40. source_id = models.UUIDField(verbose_name="资源id")
  41. is_active = models.BooleanField(default=True, db_index=True)
  42. parameter = models.JSONField(default=list)
  43. meta = models.JSONField(default=dict)
  44. class Meta:
  45. unique_together = [('trigger', 'source_id', 'source_type')]
  46. db_table = "event_trigger_task"
  47. class TaskRecord(AppModelMixin):
  48. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  49. trigger = models.ForeignKey(Trigger, on_delete=models.CASCADE)
  50. trigger_task_id = models.UUIDField(max_length=128, default=uuid.uuid7, editable=False, verbose_name="触发器任务id")
  51. source_type = models.CharField(verbose_name="触发器任务类型", choices=TriggerTaskTypeChoices.choices,
  52. default=TriggerTaskTypeChoices.APPLICATION, max_length=256)
  53. source_id = models.UUIDField(verbose_name="资源id")
  54. task_record_id = models.UUIDField(verbose_name="任务记录id")
  55. meta = models.JSONField(default=dict, encoder=SystemEncoder)
  56. state = models.CharField(verbose_name='状态', max_length=20,
  57. choices=State.choices,
  58. default=State.STARTED)
  59. run_time = models.FloatField(verbose_name="运行时长", default=0)
  60. class Meta:
  61. db_table = "event_trigger_task_record"