1
0
forked from erp-dev/erp

feat: mission category

This commit is contained in:
2026-04-14 00:03:22 +08:00
parent 9512132bb9
commit 0167478a25
18 changed files with 852 additions and 354 deletions

View File

@@ -0,0 +1,65 @@
import django.db.models.deletion
from django.db import migrations, models
from django.db.models import Q
def forwards(apps, schema_editor):
Notifier = apps.get_model("notifier", "Notifier")
NotifierRoute = apps.get_model("notifier", "NotifierRoute")
db_alias = schema_editor.connection.alias
for notifier in Notifier.objects.using(db_alias).all().only("id", "merchant_id", "event_key").iterator():
NotifierRoute.objects.using(db_alias).get_or_create(
notifier_id=notifier.id,
event_key=notifier.event_key,
mission_category_id=None,
defaults={
"merchant_id": notifier.merchant_id,
"is_enabled": True,
"description": "由旧版 notifier.event_key 自动迁移生成",
},
)
class Migration(migrations.Migration):
dependencies = [
("mission", "0004_missioncategory_refactor"),
("notifier", "0001_initial"),
]
operations = [
migrations.CreateModel(
name="NotifierRoute",
fields=[
("created_at", models.DateTimeField(auto_now_add=True, verbose_name="创建时间")),
("updated_at", models.DateTimeField(auto_now=True, verbose_name="更新时间")),
("id", models.BigAutoField(primary_key=True, serialize=False)),
("event_key", models.CharField(choices=[("mission.created", "任务已创建"), ("mission.replied", "任务有新回应"), ("mission.completed", "任务已完成"), ("mission.reply_rejected", "任务回应已撤销"), ("mission.reopened", "任务已重新打开"), ("mission.cancelled", "任务已取消")], db_index=True, max_length=100, verbose_name="事件标识")),
("is_enabled", models.BooleanField(db_index=True, default=True, verbose_name="是否启用")),
("description", models.TextField(blank=True, null=True, verbose_name="备注描述")),
("merchant", models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name="notifier_routes", to="basic_info.merchant", verbose_name="所属商户")),
("mission_category", models.ForeignKey(blank=True, help_text="为空时表示该事件的通配路由", null=True, on_delete=django.db.models.deletion.PROTECT, related_name="notifier_routes", to="mission.missioncategory", verbose_name="任务分类路由")),
("notifier", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="routes", to="notifier.notifier", verbose_name="通知器")),
],
options={
"verbose_name": "通知路由",
"verbose_name_plural": "通知路由",
"indexes": [models.Index(fields=["merchant", "event_key", "is_enabled"], name="notifier_no_merchan_58d463_idx"), models.Index(fields=["merchant", "mission_category", "is_enabled"], name="notifier_no_merchan_14b7f6_idx")],
"constraints": [models.UniqueConstraint(fields=("notifier", "event_key", "mission_category"), name="unique_notifier_route_per_scope"), models.UniqueConstraint(condition=Q(mission_category__isnull=True), fields=("notifier", "event_key"), name="unique_notifier_route_global_scope")],
},
),
migrations.RunPython(forwards, migrations.RunPython.noop),
migrations.RemoveIndex(
model_name="notifier",
name="notifier_no_merchan_c59a7a_idx",
),
migrations.RemoveField(
model_name="notifier",
name="event_key",
),
migrations.AddIndex(
model_name="notifier",
index=models.Index(fields=["merchant", "channel", "is_enabled"], name="notifier_no_merchan_532b51_idx"),
),
]