class BaseIncrease(object):
_instance_lock = threading.Lock()
num = None
date = None
_instance = None
@classmethod
@abc.abstractmethod
def get_init_num(cls):
pass
@classmethod
@abc.abstractmethod
def get_serial_num(cls):
pass
def __new__(cls, *args, **kwargs):
if not cls._instance:
with cls._instance_lock:
if not cls._instance:
cls._instance = object.__new__(cls)
cls.date = datetime.date.today().strftime("%Y%m%d")
cls.num = cls.get_init_num()
return cls._instance
@classmethod
def get_num(cls):
date = datetime.date.today().strftime("%Y%m%d")
if cls.date != date:
cls.date = date
cls.num = 1
else:
cls.num += 1
class FG_GROUP_ID(BaseIncrease):
def __new__(cls, *args, **kwargs):
return super(FG_GROUP_ID, cls).__new__(cls)
@classmethod
def get_init_num(cls):
res = db_api.get_sorted_field(f"GP{cls.date}%", "FG_GROUP_ID", models.ProxyPayTrades)
return int(res.FG_GROUP_ID[-6:]) if res else 0
@classmethod
def get_serial_num(cls):
cls.get_num()
return f'GP{cls.date}{cls.num:06}'
class FG_TRD_ID(BaseIncrease):
def __new__(cls, *args, **kwargs):
return super(FG_TRD_ID, cls).__new__(cls)
@classmethod
def get_init_num(cls):
res = db_api.get_sorted_field(f"FG{cls.date}%", "FG_TRD_ID", models.ProxyPayTrades)
return int(res.FG_TRD_ID[-6:]) if res else 0
@classmethod
def get_serial_num(cls):
cls.get_num()
return f'FG{cls.date}{cls.num:06}'
if __name__ == '__main__':
print(FG_GROUP_ID().get_serial_num())
print(FG_GROUP_ID().get_serial_num())
print(FG_GROUP_ID().get_serial_num())
获取指定字符串+递增数字的字符串
于 2022-02-22 15:25:53 首次发布
本文介绍了一个使用面向对象编程实现的类,通过`BaseIncrease`基类管理序列生成,针对FG_GROUP_ID和FG_TRD_ID两个类,分别获取初始化数量并生成唯一的序列号。方法`get_init_num`从数据库中查询数据,`get_serial_num`负责序列递增。示例展示了如何创建实例并调用序列生成方法。

被折叠的 条评论
为什么被折叠?



