diff --git a/apps/ofm/models.py b/apps/ofm/models.py index 2814e9a6..f22a132e 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -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 锁定行,避免并发冲突 - 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 - # 格式化编号,带补零 - self.number = f"(GXKG-{datetime.now().year}-{new_num:02d})" + 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 + else: + last_num =0 + # 格式化编号,带补零 + self.number = f"(GXKG-{datetime.now().year}-{last_num+1:02d})" super().save(*args, **kwargs)