:art: ROOM_GOODS_INVENTORY

huangqimin001 лет %!s(int64=4): %!d(string=назад)
Родитель
Сommit
b76ec4f9f5
6 измененных файлов с 51 добавлено и 14 удалено
  1. 5 6
      api/admin_views.py
  2. 5 0
      live/admin.py
  3. 2 1
      live/models.py
  4. 13 7
      live/views.py
  5. 24 0
      utils/redis/rinventory.py
  6. 2 0
      utils/redis/rkeys.py

+ 5 - 6
api/admin_views.py

@@ -20,6 +20,7 @@ from kol.models import KOLInfo
20 20
 from live.models import AnchorInfo, RoomGoodsInfo, RoomInfo, RoomOrderInfo, liveGoodsInfo
21 21
 from pay.models import OrderInfo
22 22
 from utils.error.errno_utils import AdministratorStatusCode, OrderStatusCode
23
+from utils.redis.rinventory import set_inventory
23 24
 
24 25
 
25 26
 logger = logging.getLogger('logit')
@@ -502,6 +503,7 @@ def live_order_delivery(request):
502 503
 @logit(res=True)
503 504
 def fetch_wx_room_list(request):
504 505
     admin_id = request.POST.get('admin_id', '')
506
+
505 507
     try:
506 508
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
507 509
     except AdministratorInfo.DoesNotExist:
@@ -513,14 +515,9 @@ def fetch_wx_room_list(request):
513 515
     secret = wxcfg.get('appsecret')
514 516
     token = access_token(appid, secret)
515 517
 
516
-    rooms = RoomInfo.objects.exclude(Q(live_status=101) | Q(live_status=102))
517
-    start = 0
518
-    if rooms.count() != 0:
519
-        start = int(rooms[0].room_id) - 1
520
-
521 518
     roominfos = requests.post(url=('http://api.weixin.qq.com/wxa/business/getliveinfo?access_token=' + token), json={'start': 0, 'limit': 99})
522
-
523 519
     roominfos = json.loads(roominfos.text).get('room_info', {})
520
+
524 521
     for roominfo in roominfos:
525 522
         anchor, _ = AnchorInfo.objects.get_or_create(
526 523
             anchor_name=roominfo.get('anchor_name')
@@ -588,6 +585,8 @@ def room_goods_add(request):
588 585
         room_goods.inventory = goods.get('inventory', 0)
589 586
         room_goods.save()
590 587
 
588
+        set_inventory(room_goods.pk, room_goods.inventory)
589
+
591 590
     return response(200, 'Room Goods Add Success', u'直播间商品库添加成功')
592 591
 
593 592
 

+ 5 - 0
live/admin.py

@@ -1,6 +1,7 @@
1 1
 from django.contrib import admin
2 2
 
3 3
 from live.models import AnchorInfo, RoomGoodsInfo, RoomInfo, RoomOrderInfo, RoomUserInfo, liveGoodsInfo
4
+from utils.redis.rinventory import set_inventory
4 5
 
5 6
 
6 7
 class AnchorInfoAdmin(admin.ModelAdmin):
@@ -18,6 +19,10 @@ class liveGoodsInfoAdmin(admin.ModelAdmin):
18 19
 class RoomGoodsInfoAdmin(admin.ModelAdmin):
19 20
     list_display = ('room_id', 'anchor_id', 'goods_id', 'inventory', 'sale_infos', 'status', 'created_at', 'updated_at')
20 21
 
22
+    def save_model(self, request, obj, form, change):
23
+        set_inventory(obj.pk, obj.inventory)
24
+        obj.save()
25
+
21 26
 
22 27
 class RoomOrderInfoAdmin(admin.ModelAdmin):
23 28
     list_display = ('order_id', 'anchor_id', 'room_id', 'goods_id', 'share_openid', 'user_id', 'total_fee', 'name', 'phone', 'address', 'tracking_number', 'pay_status', 'status', 'created_at', 'updated_at')

+ 2 - 1
live/models.py

@@ -6,6 +6,7 @@ from shortuuidfield import ShortUUIDField
6 6
 from TimeConvert import TimeConvert as tc
7 7
 
8 8
 from simditor.fields import RichTextField
9
+from utils.redis.rinventory import get_inventory
9 10
 
10 11
 
11 12
 class AnchorInfo(BaseModelMixin):
@@ -223,7 +224,7 @@ class RoomGoodsInfo(BaseModelMixin):
223 224
             'price_type': goods.price_type,
224 225
             'price': goods.price,
225 226
             'price2': goods.price2,
226
-            'inventory': self.inventory,
227
+            'inventory': get_inventory(self.pk) or self.inventory,
227 228
             'goods_status': self.goods_status,
228 229
             'sale_count': len(self.sale_infos),
229 230
         }

+ 13 - 7
live/views.py

@@ -13,6 +13,7 @@ from TimeConvert import TimeConvert as tc
13 13
 from account.models import UserInfo
14 14
 from live.models import AnchorInfo, RoomGoodsInfo, RoomInfo, RoomOrderInfo, liveGoodsInfo
15 15
 from utils.error.errno_utils import OrderStatusCode, UserStatusCode
16
+from utils.redis.rinventory import decr_inventory, incr_inventory
16 17
 
17 18
 
18 19
 WECHAT = settings.WECHAT
@@ -140,7 +141,10 @@ def live_order_create(request):
140 141
         return response(400001, 'Room Goods Not Found', description='直播间商品不存在')
141 142
 
142 143
     # 库存校验
143
-    if room_goods_info.inventory <= 0:
144
+    # if room_goods_info.inventory <= 0:
145
+    #     return response(400001, 'Room Goods Not En', description='商品库存不足')
146
+    inventory = decr_inventory(room_goods_info.pk)
147
+    if inventory < 0:
144 148
         return response(400001, 'Room Goods Not En', description='商品库存不足')
145 149
 
146 150
     # 金额校验
@@ -153,8 +157,8 @@ def live_order_create(request):
153 157
         return response(404091, 'FEE Check Fail', description='金额校验失败')
154 158
 
155 159
     # 消库存
156
-    room_goods_info.inventory -= 1
157
-    room_goods_info.save()
160
+    # room_goods_info.inventory -= 1
161
+    # room_goods_info.save()
158 162
 
159 163
     # JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里
160 164
     trade_type = 'JSAPI'
@@ -230,8 +234,9 @@ def live_order_cancel(request):
230 234
     except RoomGoodsInfo.DoesNotExist:
231 235
         return response(400001, 'Room Goods Not Found', description='直播间商品不存在')
232 236
 
233
-    goods_info.inventory += order.amount
234
-    goods_info.save()
237
+    # goods_info.inventory += order.amount
238
+    # goods_info.save()
239
+    incr_inventory(goods_info.pk, order.amount)
235 240
 
236 241
     return response(200, 'Order Cancel Success', '订单取消成功')
237 242
 
@@ -265,8 +270,9 @@ def order_paid_fail(order):
265 270
     except RoomGoodsInfo.DoesNotExist:
266 271
         return
267 272
 
268
-    goods_info.inventory += order.amount
269
-    goods_info.save()
273
+    # goods_info.inventory += order.amount
274
+    # goods_info.save()
275
+    incr_inventory(goods_info.pk, order.amount)
270 276
 
271 277
 
272 278
 @logit

+ 24 - 0
utils/redis/rinventory.py

@@ -0,0 +1,24 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from utils.redis.connect import r
4
+from utils.redis.rkeys import ROOM_GOODS_INVENTORY
5
+
6
+
7
+def set_inventory(rgid, inventory):
8
+    r.set(ROOM_GOODS_INVENTORY % rgid, inventory)
9
+
10
+
11
+def __get_inventory(rgid):
12
+    return r.getint(ROOM_GOODS_INVENTORY % rgid)
13
+
14
+
15
+def get_inventory(rgid):
16
+    return max(__get_inventory(rgid), 0)
17
+
18
+
19
+def incr_inventory(rgid, num):
20
+    r.incr(ROOM_GOODS_INVENTORY % rgid, num)
21
+
22
+
23
+def decr_inventory(rgid, num):
24
+    r.decr(ROOM_GOODS_INVENTORY % rgid, num)

+ 2 - 0
utils/redis/rkeys.py

@@ -1 +1,3 @@
1 1
 # -*- coding: utf-8 -*-
2
+
3
+ROOM_GOODS_INVENTORY = 'room:goods:inventory:%s'