|
@@ -191,13 +191,20 @@ class SerialNumberView(View):
|
|
|
if token != time_stamp or distance > 60000 or distance < -60000: # 为了全球化时间控制在一天内
|
|
|
return response.json(404)
|
|
|
|
|
|
- redisObject = RedisObject()
|
|
|
+ redisObj = RedisObject()
|
|
|
+ # redis加锁,防止同时进行其他操作
|
|
|
+ serial_operate_lock_key = 'serial_operate_lock'
|
|
|
+ isLock = redisObj.CONN.setnx(serial_operate_lock_key, 1)
|
|
|
+ if not isLock:
|
|
|
+ return response.json(5)
|
|
|
+ redisObj.CONN.expire(serial_operate_lock_key, 60)
|
|
|
+
|
|
|
key = 'serial_lock'
|
|
|
- value = redisObject.lpop(key)
|
|
|
+ value = redisObj.lpop(key)
|
|
|
count = 0
|
|
|
while value is False and count < 5:
|
|
|
time.sleep(1)
|
|
|
- value = redisObject.lpop(key)
|
|
|
+ value = redisObj.lpop(key)
|
|
|
count += 1
|
|
|
|
|
|
if count == 5 and value is False: # 暂时注释
|
|
@@ -205,7 +212,7 @@ class SerialNumberView(View):
|
|
|
userid = '3'
|
|
|
user_qs = UserModel.objects.filter(id=userid)
|
|
|
if not user_qs.exists():
|
|
|
- redisObject.rpush(key, value)
|
|
|
+ redisObj.rpush(key, value)
|
|
|
return response.json(9)
|
|
|
|
|
|
user = user_qs[0]
|
|
@@ -232,7 +239,7 @@ class SerialNumberView(View):
|
|
|
return response.json(444, '序列号不足')
|
|
|
count = result['num']
|
|
|
if count < quantity:
|
|
|
- redisObject.rpush(key, value)
|
|
|
+ redisObj.rpush(key, value)
|
|
|
return response.json(444, '序列号不足')
|
|
|
|
|
|
try:
|
|
@@ -240,8 +247,8 @@ class SerialNumberView(View):
|
|
|
sn_qs = sn_qs[0: quantity]
|
|
|
serial_number = sn_qs[0].serial_number
|
|
|
# 防止重复获取序列号
|
|
|
- is_lock = redisObject.CONN.setnx(serial_number + 'serial_number_lock', 1)
|
|
|
- redisObject.CONN.expire(serial_number + 'serial_number_lock', 60)
|
|
|
+ is_lock = redisObj.CONN.setnx(serial_number + 'serial_number_lock', 1)
|
|
|
+ redisObj.CONN.expire(serial_number + 'serial_number_lock', 60)
|
|
|
if not is_lock:
|
|
|
return response.json(5)
|
|
|
|
|
@@ -283,7 +290,8 @@ class SerialNumberView(View):
|
|
|
'user': user_qs[0]
|
|
|
}
|
|
|
LogModel.objects.create(**log)
|
|
|
- redisObject.rpush(key, value)
|
|
|
+ redisObj.del_data(key=serial_operate_lock_key) # redis解锁
|
|
|
+ redisObj.rpush(key, value)
|
|
|
return response.json(0, {'serial_number': serial_number + mark, 'mac': mac})
|
|
|
except Exception as e:
|
|
|
return response.json(500, repr(e))
|