File size: 3,725 Bytes
b4f2238 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | """Module for client import session."""
from datetime import datetime
from typing import ClassVar
from django.db import models
from django.utils.translation import gettext_lazy as _
class ClientImportStatus(models.TextChoices):
PENDING = "pending", _("待开始")
IN_PROGRESS = "in_progress", _("进行中")
COMPLETED = "completed", _("已完成")
FAILED = "failed", _("失败")
CANCELLED = "cancelled", _("已取消")
class ClientImportPhase(models.TextChoices):
PENDING = "pending", _("待开始")
DISCOVERING = "discovering", _("查找并发现")
IMPORTING = "importing", _("导入中")
COMPLETED = "completed", _("已完成")
FAILED = "failed", _("失败")
CANCELLED = "cancelled", _("已取消")
class ClientImportSession(models.Model):
"""OA客户导入记录"""
id: int
lawyer_id: int
lawyer: models.ForeignKey[models.Model, models.Model] = models.ForeignKey(
"organization.Lawyer",
on_delete=models.CASCADE,
related_name="client_import_sessions",
verbose_name=_("发起用户"),
)
credential_id: int | None
credential: models.ForeignKey[models.Model, models.Model] = models.ForeignKey(
"organization.AccountCredential",
on_delete=models.SET_NULL,
null=True,
related_name="client_import_sessions",
verbose_name=_("OA凭证"),
)
status: str = models.CharField( # type: ignore[assignment]
max_length=16,
choices=ClientImportStatus.choices,
default=ClientImportStatus.PENDING,
verbose_name=_("状态"),
)
phase: str = models.CharField( # type: ignore[assignment]
max_length=16,
choices=ClientImportPhase.choices,
default=ClientImportPhase.PENDING,
verbose_name=_("阶段"),
)
discovered_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("已发现数量"),
)
total_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("总数量"),
)
success_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("成功数量"),
)
skip_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("跳过数量"),
)
error_message: str = models.TextField( # type: ignore[assignment]
blank=True,
default="",
verbose_name=_("错误信息"),
)
progress_message: str = models.CharField( # type: ignore[assignment]
max_length=255,
blank=True,
default="",
verbose_name=_("进度描述"),
)
started_at: datetime | None = models.DateTimeField( # type: ignore[assignment]
null=True,
blank=True,
verbose_name=_("开始时间"),
)
completed_at: datetime | None = models.DateTimeField( # type: ignore[assignment]
null=True,
blank=True,
verbose_name=_("完成时间"),
)
created_at: datetime = models.DateTimeField( # type: ignore[assignment]
auto_now_add=True,
verbose_name=_("创建时间"),
)
updated_at: datetime = models.DateTimeField( # type: ignore[assignment]
auto_now=True,
verbose_name=_("更新时间"),
)
class Meta:
verbose_name = _("客户导入记录")
verbose_name_plural = _("客户导入记录")
indexes: ClassVar = [
models.Index(fields=["lawyer", "-created_at"]),
models.Index(fields=["status", "-created_at"]),
]
def __str__(self) -> str:
return f"ClientImportSession #{self.id} - {self.status}"
|