2025-03-18 08:46:50 +08:00

109 lines
5.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

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.

from django.db import models
from utils.models import CoreModel,BaseModel,table_prefix
from mysystem.models import Users
class LYWorkflow(CoreModel):
"""
工作流模型
"""
# id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, verbose_name="模型名称")
nodeConfig = models.JSONField(verbose_name="节点配置",null=True,blank=True,default=dict)
formJson = models.JSONField(verbose_name="表单设计",null=True,blank=True,default=dict)
other_config = models.JSONField(verbose_name="其他配置",null=True,blank=True,default=dict)
remark = models.CharField(max_length=100, verbose_name="流程说明", null=True, blank=True)
version = models.CharField(max_length=50,verbose_name="版本",default="1.0")
sort = models.IntegerField(default=1,verbose_name="排序")
status = models.SmallIntegerField(default=0,verbose_name="流程状态") #0不可用 1可用
is_delete = models.BooleanField(default=False, verbose_name="是否删除")#0不删除1删除
class Meta:
db_table = table_prefix + "lyworkflow"
verbose_name = '工作流模型'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
WF_STATUS_CHOICES = (
(0, "处理中"),
(1, "审批通过"),
(2, "审批拒绝"),
(3, "撤销审批"),
(4, "超时结束"),
(5, "强制终止"),
(6, "已完成"),
)
class LYWorkflowInstance(CoreModel):
"""
工作流实例
"""
# id = models.BigAutoField(primary_key=True,verbose_name="ID")
workflow = models.ForeignKey(LYWorkflow,related_name="lyworkflowins", verbose_name='工作流',on_delete=models.SET_NULL,db_constraint=False, blank=True, null=True)# 关联的工作流
current_step_name = models.CharField(verbose_name='当前所在节点名称', max_length=50)
current_step_key = models.CharField(verbose_name='当前所在节点key', max_length=50)
value = models.JSONField(verbose_name="数据",null=True,blank=True,default=dict)
state = models.SmallIntegerField(choices=WF_STATUS_CHOICES,default=0,verbose_name="状态")
expire_at = models.DateTimeField(null=True, blank=True,verbose_name="期望结束时间")#过期时间
end_at = models.DateTimeField(null=True, blank=True,verbose_name="结束时间")
class Meta:
db_table = 'lywf_instance'
verbose_name = '工作流实例'
verbose_name_plural = verbose_name
TASK_TYPE_CHOICES = (
(0, "发起"),
(1, "审批"),
)
TASK_STATUS_CHOICES = (
(0, "发起"),
(1, "审批中"),
(2, "已完成"),
(3, "已撤回"),
(4, "已超时"),
(5, "已终止"),
(6, "已退回"),
)
class LYWorkflowTask(CoreModel):
"""
工作流任务
"""
# id = models.BigAutoField(primary_key=True,verbose_name="ID")
name = models.CharField(max_length=50, verbose_name="任务名称")
instance = models.ForeignKey(LYWorkflowInstance,related_name="lyworkflowtask", verbose_name='工作流实例',on_delete=models.CASCADE,db_constraint=False, blank=True, null=True)# 关联的工作流实例
current_step_name = models.CharField(verbose_name='当前所在节点名称', max_length=50)
current_step_key = models.CharField(verbose_name='当前所在节点key', max_length=50)
value = models.JSONField(verbose_name="数据",null=True,blank=True,default=dict)
task_type = models.SmallIntegerField(choices=TASK_TYPE_CHOICES,default=0,verbose_name="任务类型")
state = models.SmallIntegerField(choices=TASK_STATUS_CHOICES,default=0,verbose_name="状态")
expire_at = models.DateTimeField(null=True, blank=True,verbose_name="期望结束时间")#过期时间
end_at = models.DateTimeField(null=True, blank=True,verbose_name="结束时间")
class Meta:
db_table = 'lywf_task'
verbose_name = '工作流任务'
verbose_name_plural = verbose_name
ACTOR_TYPE_CHOICES = (
(0, "用户"),
(1, "角色"),
(2, "部门"),
)
class LYWorkflowTaskActor(BaseModel):
"""
工作流-任务参与者
"""
# id = models.BigAutoField(primary_key=True,verbose_name="ID")
actor = models.ForeignKey(Users,null=True,blank=True,verbose_name='参与者', on_delete=models.CASCADE, db_constraint=False)
name = models.CharField(max_length=50, verbose_name="任务名称")
instance = models.ForeignKey(LYWorkflowInstance, verbose_name='工作流实例',on_delete=models.CASCADE,db_constraint=False, blank=True, null=True)# 关联的工作流实例
task = models.ForeignKey(LYWorkflowTask, verbose_name='工作流任务',on_delete=models.CASCADE,db_constraint=False, blank=True, null=True)
actor_type = models.SmallIntegerField(choices=ACTOR_TYPE_CHOICES,default=0,verbose_name="参与者类型")
class Meta:
db_table = 'lywf_task_actor'
verbose_name = '工作流任务参与者'
verbose_name_plural = verbose_name