fix : ofm-models-publicity 修改记录编号自动生成

This commit is contained in:
zty 2025-10-13 14:18:03 +08:00
parent 7d87c79dd1
commit b93024ca44
1 changed files with 10 additions and 13 deletions

View File

@ -148,19 +148,16 @@ class Publicity(CommonBDModel):
# 记录编号自动生成
def save(self, *args, **kwargs):
if not self.number:
with transaction.atomic():
# 加行锁,防止并发取到相同 last_number
last_number = self.__class__.objects.select_for_update(skip_locked=True).order_by('-id').first() # skip_locked 锁定行,避免并发冲突
last_number = self.__class__.objects.filter(number__startswith=f"(GXKG-{datetime.now().year}-)").order_by('-id').first()
if last_number:
try:
last_num = int(last_number.number.split('-')[-1])
except ValueError:
last_num = 0
new_num= last_num + 1
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)