From 1f778b63698d89edeae8625f1c8bf3dd6fdbfe58 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 13 十二月 2023 18:13:54 +0800
Subject: [PATCH] 红名单逻辑添加

---
 code_attribute/gpcode_manager.py |   61 ++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/code_attribute/gpcode_manager.py b/code_attribute/gpcode_manager.py
index 87e08a3..0bef2bf 100644
--- a/code_attribute/gpcode_manager.py
+++ b/code_attribute/gpcode_manager.py
@@ -294,6 +294,67 @@
         return self.__pause_buy_codes_cache
 
 
+# 蹇呬拱鍗�
+class MustBuyCodesManager:
+    __instance = None
+    __db = 0
+    redisManager = redis_manager.RedisManager(0)
+    __redis_key = "must_buy_rate-"
+    __must_buy_code_cancel_rate_cache = {}
+
+    def __new__(cls, *args, **kwargs):
+        if not cls.__instance:
+            cls.__instance = super(MustBuyCodesManager, cls).__new__(cls, *args, **kwargs)
+            keys = RedisUtils.keys(cls.__get_redis(), cls.__redis_key + "*")
+            for k in keys:
+                code = k.split("-")[-1]
+                val = RedisUtils.get(cls.__get_redis(), k)
+                cls.__must_buy_code_cancel_rate_cache[code] = round(float(val), 2)
+        return cls.__instance
+
+    @classmethod
+    def __get_redis(cls):
+        return cls.redisManager.getRedis()
+
+    def clear(self):
+        self.__must_buy_code_cancel_rate_cache.clear()
+        keys = RedisUtils.keys(self.__get_redis(), self.__redis_key + "*")
+        for k in keys:
+            RedisUtils.delete(self.__get_redis(), k)
+
+    def add_code(self, code, rate=0.9):
+        self.__must_buy_code_cancel_rate_cache[code] = round(rate, 2)
+        RedisUtils.setex_async(self.__db, self.__redis_key + str(code), tool.get_expire(), str(round(rate, 2)))
+
+    def remove_code(self, code):
+        if code in self.__must_buy_code_cancel_rate_cache:
+            self.__must_buy_code_cancel_rate_cache.pop(code)
+        RedisUtils.delete_async(self.__db, self.__redis_key + str(code))
+
+    def is_in(self, code):
+        return RedisUtils.get(self.__get_redis(), self.__redis_key + str(code))
+
+    def is_in_cache(self, code):
+        return code in self.__must_buy_code_cancel_rate_cache
+
+    def list_code(self):
+        codes = set()
+        keys = RedisUtils.keys(self.__get_redis(), self.__redis_key + "*")
+        if keys:
+            for k in keys:
+                code = k.split("-")[-1]
+                codes.add(code)
+        return codes
+
+    def list_code_cache(self):
+        return self.__must_buy_code_cancel_rate_cache.keys()
+
+    def get_cancel_rate_cache(self, code):
+        if code not in self.__must_buy_code_cancel_rate_cache:
+            return None
+        return self.__must_buy_code_cancel_rate_cache[code]
+
+
 class WhiteListCodeManager:
     __instance = None
     __redis_manager = redis_manager.RedisManager(2)

--
Gitblit v1.8.0