You need to enable JavaScript to run this app. Django中如何实现Jira工单按DX4C_Object规则自动分配开发人员
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何实现Jira工单按DX4C_Object规则自动分配开发人员

Django Jira工单自动分配开发人员实现方案

方案核心思路

要实现无需改代码的动态分配,核心是把分配规则抽离到数据库存储,同时监听Jira记录的新增/修改事件,触发自动匹配逻辑。

步骤1:新增分配规则存储模型

先在现有models.py里加规则表,后续规则可以通过后台/数据库直接修改,不用动业务代码:

# 新增在现有models.py中
class AllocationRule(models.Model):
    # 匹配的DX4C_Object值,支持前缀匹配(比如填"order*"匹配所有order开头的对象)或者完全匹配
    dx4c_object_match = models.CharField(max_length=500, unique=True, verbose_name="DX4C_Object匹配规则")
    # 匹配后分配的开发人员
    matched_developers = models.ManyToManyField(developer, verbose_name="分配开发人员")
    # 优先级,多个规则匹配时取优先级最高的(数字越小优先级越高)
    priority = models.IntegerField(default=10, verbose_name="优先级")
    is_active = models.BooleanField(default=True, verbose_name="是否启用")

    def __str__(self):
        return f"{self.dx4c_object_match} 分配规则"

步骤2:编写信号监听逻辑,触发自动分配

用Django的post_save信号监听jira模型的保存事件,判断是否需要触发分配:
首先在你的应用目录下新建signals.py:

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import jira, AllocationRule
import fnmatch

@receiver(post_save, sender=jira)
def auto_allocate_developer(sender, instance, created, **kwargs):
    # 仅当新增且DX4C_Object有值,或者修改时DX4C_Object发生变更才触发分配
    trigger = False
    if created:
        if instance.DX4C_Object:
            trigger = True
    else:
        # 对比修改前后的DX4C_Object值
        old_instance = jira.objects.get(id=instance.id)
        if old_instance.DX4C_Object != instance.DX4C_Object and instance.DX4C_Object:
            trigger = True
    
    if not trigger:
        return
    
    # 匹配优先级最高的生效规则
    target_rule = None
    all_rules = AllocationRule.objects.filter(is_active=True).order_by('priority')
    for rule in all_rules:
        # 支持通配符匹配
        if fnmatch.fnmatch(instance.DX4C_Object, rule.dx4c_object_match):
            target_rule = rule
            break
    
    if target_rule:
        # 清空原有分配,更新为规则匹配的开发人员
        instance.Developer.clear()
        instance.Developer.add(*target_rule.matched_developers.all())

步骤3:注册信号

在你应用的apps.py中,修改ready方法注册信号,避免循环导入:

from django.apps import AppConfig

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_app_name' # 替换为你的实际应用名称

    def ready(self):
        import your_app_name.signals # 替换为你的实际应用名称,导入信号

步骤4:后台配置(可选,实现完全无需改代码)

在admin.py中注册新增的AllocationRule模型,之后直接在Django后台新增/修改分配规则即可,不需要修改任何代码:

from django.contrib import admin
from .models import AllocationRule

admin.site.register(AllocationRule)

扩展说明

  • 如果需要加入开发人员可用时长、当前负载等维度的分配逻辑,仅需要扩展AllocationRule模型的字段,调整signals.py中的匹配逻辑即可,分配规则仍然存储在数据库中,无需修改业务流程代码。
  • 若分配逻辑比较耗时,可将信号中的分配逻辑改为Celery异步任务执行,不阻塞Jira工单的保存流程。

内容的提问来源于stack exchange,提问作者Rika Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 14:15:04