瀏覽代碼

生成/分配序列号锁定操作

locky 1 年之前
父節點
當前提交
cddb1ca4c6
共有 1 個文件被更改,包括 20 次插入0 次删除
  1. 20 0
      Controller/SerialNumberController.py

+ 20 - 0
Controller/SerialNumberController.py

@@ -97,6 +97,14 @@ class SerialNumberView(View):
         :param user_id: 用户id
         :return:
         """
+        redis_obj = RedisObject()
+        # redis加锁,防止同时进行其他操作
+        redis_key = 'serial_generate_lock'
+        serial_operate_lock = redis_obj.CONN.setnx(redis_key, 1)
+        if not serial_operate_lock:
+            return response.json(5)
+        redis_obj.CONN.expire(redis_key, 60*5)
+
         id = request_dict.get('id', None)
         quantity = request_dict.get('quantity', None)
 
@@ -197,9 +205,11 @@ class SerialNumberView(View):
                     fail_reason = '欧洲服务器生成序列号发生异常'
                     return self.failResponse(company.name, quantity, fail_reason, Log, response)
 
+                redis_obj.del_data(key=redis_key)  # redis解锁
                 return response.json(0)
 
         except Exception as e:
+            redis_obj.del_data(key=redis_key)  # redis解锁
             djangoLogger = logging.getLogger('django')
             djangoLogger.info(repr(e))
             return response.json(500)
@@ -219,6 +229,14 @@ class SerialNumberView(View):
         :param user_id: 用户id
         :return:
         """
+        redis_obj = RedisObject()
+        # redis加锁,防止同时进行其他操作
+        redis_key = 'serial_generate_lock'
+        serial_operate_lock = redis_obj.CONN.setnx(redis_key, 1)
+        if not serial_operate_lock:
+            return response.json(5)
+        redis_obj.CONN.expire(redis_key, 60*5)
+
         quantity = int(request_dict.get('quantity', 0))
 
         if not quantity:
@@ -300,9 +318,11 @@ class SerialNumberView(View):
                     fail_reason = '欧洲服务器生成序列号发生异常'
                     return self.generateFail(quantity, fail_reason, Log, response)
 
+                redis_obj.del_data(key=redis_key)  # redis解锁
                 return response.json(0)
 
         except Exception as e:
+            redis_obj.del_data(key=redis_key)  # redis解锁
             djangoLogger = logging.getLogger('django')
             djangoLogger.info(repr(e))
             return response.json(500)