雪花ID重复预处理

This commit is contained in:
caoqianming 2022-10-11 17:09:05 +08:00
parent aff9c0d613
commit b2534d5471
1 changed files with 16 additions and 2 deletions

View File

@ -1,7 +1,9 @@
import time
import django.utils.timezone as timezone
from django.db import models
from django.db.models.query import QuerySet
from apps.utils.snowflake import idWorker
from django.db import IntegrityError
# 自定义软删除查询基类
@ -54,7 +56,8 @@ class BaseModel(models.Model):
"""
基本表
"""
id = models.CharField(max_length=20, primary_key=True, editable=False, verbose_name='主键ID', help_text='主键ID')
id = models.CharField(max_length=20, primary_key=True,
editable=False, verbose_name='主键ID', help_text='主键ID')
create_time = models.DateTimeField(
default=timezone.now, verbose_name='创建时间', help_text='创建时间')
update_time = models.DateTimeField(
@ -66,9 +69,20 @@ class BaseModel(models.Model):
abstract = True
def save(self, *args, **kwargs) -> None:
# 出现了雪花ID重复,不知道怎么处理,先这样异常处理一下
gen_id = False
if not self.id:
gen_id = True
self.id = idWorker.get_id()
return super().save(*args, **kwargs)
try:
x = super().save(*args, **kwargs)
return x
except IntegrityError as e:
if gen_id:
time.sleep(0.01)
self.id = idWorker.get_id()
return super().save(*args, **kwargs)
raise e
class SoftModel(BaseModel):