fix : ofm-models-publicity 修改记录编号自动生成
This commit is contained in:
parent
7d87c79dd1
commit
b93024ca44
|
@ -148,19 +148,16 @@ class Publicity(CommonBDModel):
|
||||||
# 记录编号自动生成
|
# 记录编号自动生成
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.number:
|
if not self.number:
|
||||||
with transaction.atomic():
|
last_number = self.__class__.objects.filter(number__startswith=f"(GXKG-{datetime.now().year}-)").order_by('-id').first()
|
||||||
# 加行锁,防止并发取到相同 last_number
|
|
||||||
last_number = self.__class__.objects.select_for_update(skip_locked=True).order_by('-id').first() # skip_locked 锁定行,避免并发冲突
|
|
||||||
if last_number:
|
if last_number:
|
||||||
try:
|
try:
|
||||||
last_num = int(last_number.number.split('-')[-1])
|
last_num = int(last_number.number.split('-')[-1])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
last_num = 0
|
last_num = 0
|
||||||
new_num= last_num + 1
|
|
||||||
else:
|
else:
|
||||||
new_num = 1
|
last_num =0
|
||||||
# 格式化编号,带补零
|
# 格式化编号,带补零
|
||||||
self.number = f"(GXKG-{datetime.now().year}-{new_num:02d})"
|
self.number = f"(GXKG-{datetime.now().year}-{last_num+1:02d})"
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue