:art: Format Codes

huangqimin001 4 年 前
コミット
2c83131e50
共有8 個のファイルを変更した177 個の追加165 個の削除を含む
  1. 51 49
      api/admin_views.py
  2. 1 2
      api/mini_views.py
  3. 9 9
      api/urls.py
  4. 4 2
      live/admin.py
  5. 16 16
      live/models.py
  6. 1 0
      live/tests.py
  7. 74 65
      live/views.py
  8. 21 22
      pay/views.py

+ 51 - 49
api/admin_views.py

@@ -1,34 +1,31 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
-import logging
4
-import requests
5 3
 import json
4
+import logging
6 5
 
7
-from django.core.paginator import Paginator
6
+import requests
7
+from django.conf import settings
8 8
 from django.contrib.auth.hashers import check_password
9
+from django.core.paginator import Paginator
9 10
 from django.db import transaction
10 11
 from django.db.models import Q
11 12
 from django_logit import logit
12 13
 from django_response import response
13
-from django.core.files import File
14
-from TimeConvert import TimeConvert as tc
15
-from django.conf import settings
16
-
17 14
 from pywe_token import access_token
18
-from pywe_storage import RedisStorage
15
+from TimeConvert import TimeConvert as tc
19 16
 
20 17
 from account.models import AdministratorInfo, UserInfo
21 18
 from goods.models import GoodsInfo, PackInfo
22 19
 from kol.models import KOLInfo
20
+from live.models import AnchorInfo, RoomGoodsInfo, RoomInfo, RoomOrderInfo, liveGoodsInfo
23 21
 from pay.models import OrderInfo
24
-from live.models import RoomInfo, RoomGoodsInfo, RoomOrderInfo, AnchorInfo, liveGoodsInfo
25 22
 from utils.error.errno_utils import AdministratorStatusCode, OrderStatusCode
26 23
 
27
-from utils.redis.connect import r
28 24
 
29 25
 logger = logging.getLogger('logit')
30 26
 WECHAT = settings.WECHAT
31 27
 
28
+
32 29
 @logit(res=True)
33 30
 def login(request):
34 31
     name = request.POST.get('name', '')
@@ -141,6 +138,7 @@ def order_update(request):
141 138
 
142 139
     return response(200, 'Order Update Success', '订单更新成功')
143 140
 
141
+
144 142
 @logit(res=True)
145 143
 def live_goods_list(request):
146 144
     admin_id = request.POST.get('admin_id', '')
@@ -169,6 +167,7 @@ def live_goods_list(request):
169 167
         'count': count,
170 168
     })
171 169
 
170
+
172 171
 @logit(res=True)
173 172
 def live_goods_create(request):
174 173
     admin_id = request.POST.get('admin_id', '')
@@ -182,7 +181,6 @@ def live_goods_create(request):
182 181
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
183 182
     except AdministratorInfo.DoesNotExist:
184 183
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
185
-    
186 184
 
187 185
     wxcfg = WECHAT.get('MINIAPP', {})
188 186
 
@@ -195,7 +193,7 @@ def live_goods_create(request):
195 193
 
196 194
     if media_id == '':
197 195
         return response()
198
-    
196
+
199 197
     goods_info, _ = liveGoodsInfo.objects.get_or_create(
200 198
         name=goods_name,
201 199
         coverImgUrl=media_id,
@@ -205,7 +203,7 @@ def live_goods_create(request):
205 203
         goods_img=goods_img
206 204
     )
207 205
 
208
-    data ={
206
+    data = {
209 207
         "goodsInfo": {
210 208
             'name': goods_name,
211 209
             'coverImgUrl': media_id,
@@ -214,7 +212,7 @@ def live_goods_create(request):
214 212
             'price2': price2 / 100,
215 213
             'url': 'pages/live/order/order?goods_id=' + goods_info.goods_id,
216 214
         }
217
-    } 
215
+    }
218 216
 
219 217
     wx_goods = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=' + token), json=data).text
220 218
     wx_goods = json.loads(wx_goods)
@@ -227,6 +225,7 @@ def live_goods_create(request):
227 225
         'goods': goods_info.admindata,
228 226
     })
229 227
 
228
+
230 229
 @logit(res=True)
231 230
 def live_goods_update(request):
232 231
     admin_id = request.POST.get('admin_id', '')
@@ -239,7 +238,6 @@ def live_goods_update(request):
239 238
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
240 239
     except AdministratorInfo.DoesNotExist:
241 240
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
242
-    
243 241
 
244 242
     goods_info = liveGoodsInfo.objects.get(goods_id=goods_id, status=True)
245 243
 
@@ -255,8 +253,8 @@ def live_goods_update(request):
255 253
     if media_id == '':
256 254
         return response()
257 255
 
258
-    data ={
259
-        "goodsInfo": {
256
+    data = {
257
+        'goodsInfo': {
260 258
             'goodsId': goods_info.wx_goods_id,
261 259
             'name': goods_info.name,
262 260
             'coverImgUrl': media_id,
@@ -265,7 +263,7 @@ def live_goods_update(request):
265 263
             'price2': price2 / 100,
266 264
             'url': 'pages/live/order/order?goods_id=' + goods_id,
267 265
         }
268
-    } 
266
+    }
269 267
 
270 268
     wx_goods = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/goods/update?access_token=' + token), json=data).text
271 269
     errcode = json.loads(wx_goods).get('errcode', -1)
@@ -278,12 +276,12 @@ def live_goods_update(request):
278 276
     goods_info.price2 = price2
279 277
     goods_info.coverImgUrl = media_id
280 278
     goods_info.save()
281
-    
282 279
 
283 280
     return response(200, 'Live Goods Update Success', u'直播商品库更新成功', data={
284 281
         'goods': goods_info.admindata,
285 282
     })
286 283
 
284
+
287 285
 @logit(res=True)
288 286
 def live_goods_audit(request):
289 287
     admin_id = request.POST.get('admin_id', '')
@@ -291,7 +289,6 @@ def live_goods_audit(request):
291 289
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
292 290
     except AdministratorInfo.DoesNotExist:
293 291
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
294
-    
295 292
 
296 293
     wxcfg = WECHAT.get('MINIAPP', {})
297 294
 
@@ -312,9 +309,8 @@ def live_goods_audit(request):
312 309
         g = liveGoodsInfo.objects.get(wx_goods_id=goods.get('goods_id', ''), status=True)
313 310
         g.audit_status = goods.get('audit_status', 0)
314 311
         g.save()
315
-    
316
-    return response(200, 'Live Goods Audit Success', '获取直播商品库审核状态成功') 
317 312
 
313
+    return response(200, 'Live Goods Audit Success', '获取直播商品库审核状态成功')
318 314
 
319 315
 
320 316
 @logit(res=True)
@@ -322,11 +318,11 @@ def live_goods_delete(request):
322 318
     admin_id = request.POST.get('admin_id', '')
323 319
     goods_id = request.POST.get('goods_id', '')
324 320
     wx_goods_id = request.POST.get('wx_goods_id', '')
321
+
325 322
     try:
326 323
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
327 324
     except AdministratorInfo.DoesNotExist:
328 325
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
329
-    
330 326
 
331 327
     wxcfg = WECHAT.get('MINIAPP', {})
332 328
 
@@ -334,18 +330,15 @@ def live_goods_delete(request):
334 330
     secret = wxcfg.get('appsecret')
335 331
     token = access_token(appid, secret)
336 332
 
337
-    status = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=' + token), json={ 'goodsId': wx_goods_id}).text
333
+    status = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=' + token), json={'goodsId': wx_goods_id}).text
338 334
     errcode = json.loads(status).get('errcode', -1)
339 335
 
340 336
     if errcode != 0:
341 337
         return response()
342
-    
343
-    try:
344
-        liveGoodsInfo.objects.filter(goods_id=goods_id, status=True).update(status=False)
345
-    except:
346
-        return response()
347
-    
348
-    return response(200, 'Live Goods Delete Success', '直播商品库删除成功') 
338
+
339
+    liveGoodsInfo.objects.filter(goods_id=goods_id, status=True).update(status=False)
340
+
341
+    return response(200, 'Live Goods Delete Success', '直播商品库删除成功')
349 342
 
350 343
 
351 344
 @logit(res=True)
@@ -373,6 +366,7 @@ def live_room_list(request):
373 366
         'count': count,
374 367
     })
375 368
 
369
+
376 370
 @logit(res=True)
377 371
 def live_order_list(request):
378 372
     admin_id = request.POST.get('admin_id', '')
@@ -386,11 +380,11 @@ def live_order_list(request):
386 380
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
387 381
     except AdministratorInfo.DoesNotExist:
388 382
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
389
-    
383
+
390 384
     orders = RoomOrderInfo.objects.filter(Q(name__contains=query) | Q(phone__contains=query)).order_by('-created_at')
391 385
     if pay_status:
392 386
         orders = orders.filter(pay_status=pay_status)
393
-    
387
+
394 388
     if goods_name:
395 389
         goods_infos = liveGoodsInfo.objects.filter(goods_name__contains=goods_name)
396 390
         goods_infos = [info.goods_id for info in goods_infos]
@@ -405,12 +399,13 @@ def live_order_list(request):
405 399
         'count': count,
406 400
     })
407 401
 
402
+
408 403
 @logit(res=True)
409 404
 def live_order_delivery(request):
410 405
     admin_id = request.POST.get('admin_id', '')
411 406
     order_id = request.POST.get('order_id', '')
412 407
     user_id = request.POST.get('user_id', '')
413
-    
408
+
414 409
     delivery_id = request.POST.get('delivery_id', '')
415 410
     biz_id = request.POST.get('biz_id', '')
416 411
 
@@ -418,13 +413,13 @@ def live_order_delivery(request):
418 413
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
419 414
     except AdministratorInfo.DoesNotExist:
420 415
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
421
-    
416
+
422 417
     user = UserInfo.objects.get(user_id=user_id, status=True)
423 418
 
424 419
     order = RoomOrderInfo.objects.get(order_id=order_id, status=True)
425 420
 
426 421
     goods = liveGoodsInfo.objects.get(goods_id=order.goods_id, status=True)
427
-    
422
+
428 423
     wxcfg = WECHAT.get('MINIAPP', {})
429 424
 
430 425
     appid = wxcfg.get('appID')
@@ -462,13 +457,15 @@ def live_order_delivery(request):
462 457
             'spaceX': 10,
463 458
             'spaceY': 10,
464 459
             'spaceZ': 10,
465
-            'detail_list': [{
466
-            'name': goods.name,
467
-            'count': order.amount,
468
-            }]
460
+            'detail_list': [
461
+                {
462
+                    'name': goods.name,
463
+                    'count': order.amount,
464
+                }
465
+            ]
469 466
         },
470 467
         'shop': {
471
-            'wxa_path': 'pages/live/anchorHome/anchorHome?anchor_id='+order.anchor_id,
468
+            'wxa_path': 'pages/live/anchorHome/anchorHome?anchor_id=' + order.anchor_id,
472 469
             'img_url': goods.goods_img_url,
473 470
             'goods_name': goods.name,
474 471
             'goods_count': order.amount,
@@ -493,14 +490,15 @@ def live_order_delivery(request):
493 490
         deliveryResultcode = res.get('delivery_resultcode', '')
494 491
         deliveryResultmsg = res.get('delivery_resultmsg', '')
495 492
         return response(errCode, errMsg, str(deliveryResultcode) + ':' + deliveryResultmsg)
496
-    
493
+
497 494
     order.tracking_number = res.get('waybill_id', '')
498 495
     order.save()
499
-    
496
+
500 497
     return response(200, 'Live Order Delivery Success', '直播订单下单成功', data={
501 498
         'order': order.admindata
502 499
     })
503 500
 
501
+
504 502
 @logit(res=True)
505 503
 def fetch_wx_room_list(request):
506 504
     admin_id = request.POST.get('admin_id', '')
@@ -508,7 +506,6 @@ def fetch_wx_room_list(request):
508 506
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
509 507
     except AdministratorInfo.DoesNotExist:
510 508
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
511
-    
512 509
 
513 510
     wxcfg = WECHAT.get('MINIAPP', {})
514 511
 
@@ -521,7 +518,7 @@ def fetch_wx_room_list(request):
521 518
     if rooms.count() != 0:
522 519
         start = int(rooms[0].room_id) - 1
523 520
 
524
-    roominfos = requests.post(url=('http://api.weixin.qq.com/wxa/business/getliveinfo?access_token='+token), json={'start': 0, 'limit': 99})
521
+    roominfos = requests.post(url=('http://api.weixin.qq.com/wxa/business/getliveinfo?access_token=' + token), json={'start': 0, 'limit': 99})
525 522
 
526 523
     roominfos = json.loads(roominfos.text).get('room_info', {})
527 524
     for roominfo in roominfos:
@@ -540,9 +537,10 @@ def fetch_wx_room_list(request):
540 537
         room.anchor_name = roominfo.get('anchor_name', '')
541 538
         room.anchor_id = anchor.anchor_id
542 539
         room.save()
543
-    
540
+
544 541
     return response(200, 'Fetch wx Room List Success', u'微信直播间列表获取成功')
545 542
 
543
+
546 544
 @logit(res=True)
547 545
 def room_goods_list(request):
548 546
     admin_id = request.POST.get('admin_id', '')
@@ -554,7 +552,7 @@ def room_goods_list(request):
554 552
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
555 553
     except AdministratorInfo.DoesNotExist:
556 554
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
557
-    
555
+
558 556
     goods_list = RoomGoodsInfo.objects.filter(status=True).order_by('-created_at')
559 557
 
560 558
     if room_id:
@@ -569,6 +567,7 @@ def room_goods_list(request):
569 567
         'count': count,
570 568
     })
571 569
 
570
+
572 571
 def room_goods_add(request):
573 572
     admin_id = request.POST.get('admin_id', '')
574 573
     room_id = request.POST.get('room_id', '')
@@ -591,6 +590,7 @@ def room_goods_add(request):
591 590
 
592 591
     return response(200, 'Room Goods Add Success', u'直播间商品库添加成功')
593 592
 
593
+
594 594
 def room_goods_publish(request):
595 595
     admin_id = request.POST.get('admin_id', '')
596 596
     room_id = request.POST.get('room_id', '')
@@ -606,17 +606,18 @@ def room_goods_publish(request):
606 606
     secret = wxcfg.get('appsecret')
607 607
     token = access_token(appid, secret)
608 608
 
609
-    status = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=' + token), json={ 'ids': [goods.wx_goods_id], 'roomId': room_id}).text
609
+    status = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=' + token), json={'ids': [goods.wx_goods_id], 'roomId': room_id}).text
610 610
     errcode = json.loads(status).get('errcode', -1)
611 611
 
612 612
     if errcode != 0:
613 613
         return response(errcode, 'Room Goods Publish Fail', '直播间商品发布失败')
614
-    
614
+
615 615
     room_goods.goods_status = RoomGoodsInfo.PUBLISH
616 616
     room_goods.save()
617 617
 
618 618
     return response(200, 'Room Goods Publish Success', '直播间商品上架成功')
619 619
 
620
+
620 621
 def room_goods_off(request):
621 622
     admin_id = request.POST.get('admin_id', '')
622 623
     room_id = request.POST.get('room_id', '')
@@ -629,6 +630,7 @@ def room_goods_off(request):
629 630
 
630 631
     return response(200, 'Room Goods Off Success', '直播间商品下架成功')
631 632
 
633
+
632 634
 def room_goods_update(request):
633 635
     admin_id = request.POST.get('admin_id', '')
634 636
     room_id = request.POST.get('room_id', '')

+ 1 - 2
api/mini_views.py

@@ -64,6 +64,7 @@ def mini_login_api(request):
64 64
 
65 65
     return response(data=user.data)
66 66
 
67
+
67 68
 @logit(res=True)
68 69
 @transaction.atomic
69 70
 def mini_live_login_api(request):
@@ -112,7 +113,6 @@ def mini_live_login_api(request):
112 113
     # Store SessionKey
113 114
     store_session_key(appid=appid, secret=secret, session_key=session_key, unid=user.user_id, storage=RedisStorage(r))
114 115
 
115
-
116 116
     # Update live
117 117
     room = RoomInfo.objects.get(room_id=room_id)
118 118
     is_new = not RoomUserInfo.objects.filter(user_id=user.user_id).exists()
@@ -129,7 +129,6 @@ def mini_live_login_api(request):
129 129
     room_user.is_new = is_new
130 130
     room_user.save()
131 131
 
132
-
133 132
     return response(data=user.data)
134 133
 
135 134
 

+ 9 - 9
api/urls.py

@@ -4,8 +4,8 @@ from django.conf.urls import url
4 4
 from django_file_upload import views as file_views
5 5
 
6 6
 from api import admin_views, mini_views, oauth_views, pack_views
7
-from pay import views as pay_views
8 7
 from live import views as live_views
8
+from pay import views as pay_views
9 9
 
10 10
 
11 11
 urlpatterns = [
@@ -23,7 +23,7 @@ urlpatterns += [
23 23
     url(r'^pay/wx/notify_url$', pay_views.wx_notify_url_api, name='wx_notify_url_api'),  # 支付异步通知回调地址
24 24
 ]
25 25
 
26
-#直播相关
26
+# 直播相关
27 27
 urlpatterns += [
28 28
     url(r'^live/anchor/detail$', live_views.anchor_detail, name='anchor_detail'),   # 微信直播间列表
29 29
     url(r'^live/goods/detail$', live_views.room_goods_detail, name='room_goods_detail'),
@@ -55,15 +55,15 @@ urlpatterns += [
55 55
     url(r'^admin/live/room/list$', admin_views.live_room_list, name='live_room_list'),   # 直播间列表
56 56
 
57 57
     url(r'^admin/live/order/list$', admin_views.live_order_list, name='live_order_list'),   # 直播间订单列表
58
-    url(r'^admin/live/order/delivery$', admin_views.live_order_delivery, name='live_order_delivery'), # 直播间订单发货
58
+    url(r'^admin/live/order/delivery$', admin_views.live_order_delivery, name='live_order_delivery'),  # 直播间订单发货
59 59
 
60
-    url(r'^admin/room/goods/list$', admin_views.room_goods_list, name='room_goods_list'), # 直播间商品
61
-    url(r'^admin/room/goods/add$', admin_views.room_goods_add, name='room_goods_add'), #添加直播间商品
62
-    url(r'^admin/room/goods/publish$', admin_views.room_goods_publish, name='room_goods_publish'), #直播间商品上架
63
-    url(r'^admin/room/goods/off$', admin_views.room_goods_off, name='room_goods_off'), #直播间商品下架
64
-    url(r'^admin/room/goods/update$', admin_views.room_goods_update, name='room_goods_update'), #直播间商品库存更新
60
+    url(r'^admin/room/goods/list$', admin_views.room_goods_list, name='room_goods_list'),  # 直播间商品
61
+    url(r'^admin/room/goods/add$', admin_views.room_goods_add, name='room_goods_add'),  # 添加直播间商品
62
+    url(r'^admin/room/goods/publish$', admin_views.room_goods_publish, name='room_goods_publish'),  # 直播间商品上架
63
+    url(r'^admin/room/goods/off$', admin_views.room_goods_off, name='room_goods_off'),  # 直播间商品下架
64
+    url(r'^admin/room/goods/update$', admin_views.room_goods_update, name='room_goods_update'),  # 直播间商品库存更新
65 65
 
66
-    #微信直播 api
66
+    # 微信直播 api
67 67
     url(r'^admin/live/wx/room/list$', admin_views.fetch_wx_room_list, name='fetch_wx_room_list'),   # 微信直播间列表
68 68
 ]
69 69
 

+ 4 - 2
live/admin.py

@@ -1,6 +1,6 @@
1 1
 from django.contrib import admin
2 2
 
3
-from live.models import RoomGoodsInfo, RoomInfo, AnchorInfo, liveGoodsInfo, RoomOrderInfo, RoomUserInfo
3
+from live.models import AnchorInfo, RoomGoodsInfo, RoomInfo, RoomOrderInfo, RoomUserInfo, liveGoodsInfo
4 4
 
5 5
 
6 6
 class AnchorInfoAdmin(admin.ModelAdmin):
@@ -18,10 +18,12 @@ class liveGoodsInfoAdmin(admin.ModelAdmin):
18 18
 class RoomGoodsInfoAdmin(admin.ModelAdmin):
19 19
     list_display = ('room_id', 'anchor_id', 'goods_id', 'inventory', 'sale_infos', 'status', 'created_at', 'updated_at')
20 20
 
21
+
21 22
 class RoomOrderInfoAdmin(admin.ModelAdmin):
22 23
     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')
23 24
     readonly_fields_exclude = ('tracking_number', )
24 25
 
26
+
25 27
 class RoomUserInfoAdmin(admin.ModelAdmin):
26 28
     list_display = ('room_id', 'anchor_id', 'user_id', 'openid', 'share_openid', 'status', 'created_at', 'updated_at')
27 29
 
@@ -31,4 +33,4 @@ admin.site.register(RoomInfo, RoomInfoAdmin)
31 33
 admin.site.register(liveGoodsInfo, liveGoodsInfoAdmin)
32 34
 admin.site.register(RoomGoodsInfo, RoomGoodsInfoAdmin)
33 35
 admin.site.register(RoomOrderInfo, RoomOrderInfoAdmin)
34
-admin.site.register(RoomUserInfo, RoomUserInfoAdmin)
36
+admin.site.register(RoomUserInfo, RoomUserInfoAdmin)

+ 16 - 16
live/models.py

@@ -1,5 +1,3 @@
1
-import json
2
-
3 1
 from django.db import models
4 2
 from django.utils.translation import ugettext_lazy as _
5 3
 from django_models_ext import BaseModelMixin, upload_file_path, upload_file_url, upload_path
@@ -7,9 +5,9 @@ from jsonfield import JSONField
7 5
 from shortuuidfield import ShortUUIDField
8 6
 from TimeConvert import TimeConvert as tc
9 7
 
10
-from account.models import UserInfo
11 8
 from simditor.fields import RichTextField
12 9
 
10
+
13 11
 class AnchorInfo(BaseModelMixin):
14 12
     anchor_id = ShortUUIDField(_('anchor_id'), max_length=32, blank=True, help_text='主播唯一标识', unique=True)
15 13
     # 微信相关
@@ -20,14 +18,14 @@ class AnchorInfo(BaseModelMixin):
20 18
     anchor_name = models.CharField(_('anchor_name'), max_length=255, blank=True, help_text='主播姓名', db_index=True)
21 19
     anchor_avatar = models.ImageField(_('anchor_avatar'), upload_to=upload_path, help_text='主播头像')
22 20
     anchor_intro = RichTextField(_('anchor_intro'), blank=True, help_text='主播介绍')
23
-    
21
+
24 22
     class Meta:
25 23
         verbose_name = _('主播信息')
26 24
         verbose_name_plural = _('主播信息')
27 25
 
28 26
     def __unicode__(self):
29 27
         return self.pk
30
-    
28
+
31 29
     @property
32 30
     def anchor_avatar_path(self):
33 31
         return upload_file_path(self.anchor_avatar)
@@ -35,6 +33,7 @@ class AnchorInfo(BaseModelMixin):
35 33
     @property
36 34
     def anchor_avatar_url(self):
37 35
         return upload_file_url(self.anchor_avatar)
36
+
38 37
     @property
39 38
     def banner_path(self):
40 39
         return upload_file_path(self.banner)
@@ -57,8 +56,8 @@ class RoomInfo(BaseModelMixin):
57 56
 
58 57
     anchor_id = models.CharField(_('anchor_id'), blank=True, max_length=32, help_text='主播唯一标识')
59 58
     anchor_name = models.CharField(_('anchor_name'), blank=True, max_length=255, help_text='主播名称', db_index=True)
60
-    
61
-    # "goods": [          
59
+
60
+    # "goods": [
62 61
     #     {
63 62
     #         "cover_img": "http://mmbiz.qpic.cn/mmbiz_png/FVribAGdErI2PmyST9ZM0JLbNM48I7TH2FlrwYOlnYqGaej8qKubG1EvK0QIkkwqvicrYTzVtjKmSZSeY5ianc3mw/0?wx_fmt=png",
64 63
     #         "url": "pages/index/index.html",
@@ -74,7 +73,7 @@ class RoomInfo(BaseModelMixin):
74 73
 
75 74
     def __unicode__(self):
76 75
         return self.pk
77
-    
76
+
78 77
     @property
79 78
     def cover_img_path(self):
80 79
         return upload_file_path(self.cover_img)
@@ -82,7 +81,7 @@ class RoomInfo(BaseModelMixin):
82 81
     @property
83 82
     def cover_img_url(self):
84 83
         return upload_file_url(self.cover_img)
85
-    
84
+
86 85
     @property
87 86
     def share_img_path(self):
88 87
         return upload_file_path(self.share_img)
@@ -100,7 +99,7 @@ class RoomInfo(BaseModelMixin):
100 99
             'cover_img': self.wx_cover_img,
101 100
             'share_img': self.wx_share_img,
102 101
         }
103
-       
102
+
104 103
     @property
105 104
     def admindata(self):
106 105
         anchor = AnchorInfo.objects.get(anchor_id=self.anchor_id)
@@ -117,7 +116,7 @@ class RoomInfo(BaseModelMixin):
117 116
             'anchor_avatar': anchor.anchor_avatar_url
118 117
         }
119 118
 
120
-  
119
+
121 120
 class liveGoodsInfo(BaseModelMixin):
122 121
     goods_id = ShortUUIDField(_('goods_id'), max_length=32, blank=True, help_text='商品ID', unique=True)
123 122
 
@@ -161,7 +160,7 @@ class liveGoodsInfo(BaseModelMixin):
161 160
     @property
162 161
     def goods_img_url(self):
163 162
         return upload_file_url(self.goods_img)
164
-    
163
+
165 164
     @property
166 165
     def admindata(self):
167 166
         return {
@@ -179,7 +178,6 @@ class liveGoodsInfo(BaseModelMixin):
179 178
         }
180 179
 
181 180
 
182
-
183 181
 class RoomGoodsInfo(BaseModelMixin):
184 182
     PUBLISH = 0
185 183
     DRAFT = 1
@@ -205,7 +203,7 @@ class RoomGoodsInfo(BaseModelMixin):
205 203
 
206 204
     def __unicode__(self):
207 205
         return self.pk
208
-    
206
+
209 207
     @property
210 208
     def admindata(self):
211 209
         goods = liveGoodsInfo.objects.get(goods_id=self.goods_id)
@@ -230,6 +228,7 @@ class RoomGoodsInfo(BaseModelMixin):
230 228
             'sale_count': len(self.sale_infos),
231 229
         }
232 230
 
231
+
233 232
 class RoomUserInfo(BaseModelMixin):
234 233
     room_id = models.CharField(_('room_id'), max_length=32, help_text='房间唯一标识', db_index=True)
235 234
     anchor_id = models.CharField(_('anchor_id'), max_length=32, blank=True, help_text='主播唯一标识')
@@ -247,6 +246,7 @@ class RoomUserInfo(BaseModelMixin):
247 246
     def __unicode__(self):
248 247
         return self.pk
249 248
 
249
+
250 250
 class RoomOrderInfo(BaseModelMixin):
251 251
     """
252 252
     # Trade State of Wechat Query
@@ -279,7 +279,7 @@ class RoomOrderInfo(BaseModelMixin):
279 279
     share_openid = models.CharField(_('share_openid'), max_length=32, blank=True, help_text='转发用户 openid')
280 280
 
281 281
     amount = models.IntegerField(_('amount'), default=0, help_text='数量')
282
-    
282
+
283 283
     name = models.CharField(_('name'), max_length=255, blank=True, null=True, help_text='姓名')
284 284
     phone = models.CharField(_('phone'), max_length=255, blank=True, null=True, help_text='电话')
285 285
     province = models.CharField(_('province'), max_length=255, blank=True, null=True, help_text='省份')
@@ -344,4 +344,4 @@ class RoomOrderInfo(BaseModelMixin):
344 344
             'total_fee': self.total_fee,
345 345
             'pay_status': self.pay_status,
346 346
             'paid_at': tc.local_string(utc_dt=self.paid_at, format='%Y-%m-%d %H:%M'),
347
-        }
347
+        }

+ 1 - 0
live/tests.py

@@ -1,3 +1,4 @@
1 1
 from django.test import TestCase
2 2
 
3
+
3 4
 # Create your tests here.

+ 74 - 65
live/views.py

@@ -1,35 +1,34 @@
1
-from django.shortcuts import render
2
-from django_query import get_query_value
1
+from django.conf import settings
3 2
 from django.db import transaction
4
-from django_response import response
5 3
 from django.shortcuts import HttpResponse
6 4
 from django_logit import logit
5
+from django_query import get_query_value
6
+from django_response import response
7 7
 from pywe_exception import WeChatPayException
8 8
 from pywe_pay import WeChatPay
9 9
 from pywe_pay_notify import check_pay_notify
10 10
 from pywe_response import WXPAY_NOTIFY_FAIL, WXPAY_NOTIFY_SUCCESS
11 11
 from TimeConvert import TimeConvert as tc
12 12
 
13
-from django.conf import settings
14
-
15
-from live.models import liveGoodsInfo, RoomGoodsInfo, RoomOrderInfo, RoomInfo, AnchorInfo
16 13
 from account.models import UserInfo
17
-
14
+from live.models import AnchorInfo, RoomGoodsInfo, RoomInfo, RoomOrderInfo, liveGoodsInfo
18 15
 from utils.error.errno_utils import OrderStatusCode, UserStatusCode
19 16
 
17
+
20 18
 WECHAT = settings.WECHAT
21 19
 
20
+
22 21
 def anchor_detail(request):
23 22
     anchor_id = get_query_value(request, 'anchor_id', '')
24 23
 
25 24
     try:
26 25
         anchor = AnchorInfo.objects.get(anchor_id=anchor_id)
27
-    except:
26
+    except AnchorInfo.DoesNotExist:
28 27
         return response()
29
-    
28
+
30 29
     rooms = RoomInfo.objects.filter(anchor_id=anchor_id)
31 30
     rooms = [room.anchorData for room in rooms]
32
-    
31
+
33 32
     return response(200, 'Get Room Anchor Details Success', '获取主播详情成功', data={
34 33
         'anchor': {
35 34
             'anchor_id': anchor.anchor_id,
@@ -43,49 +42,50 @@ def anchor_detail(request):
43 42
 
44 43
 
45 44
 def room_goods_detail(request):
46
-  goods_id = get_query_value(request, 'goods_id', '')
47
-  room_id = get_query_value(request, 'room_id', '')
48
-  
49
-  # 校验直播间和商品
50
-  try:
51
-    room_goods_info = RoomGoodsInfo.objects.get(goods_id=goods_id, room_id=room_id)
52
-  except:
53
-    return response(400001, 'Room Goods Not Found', '直播间商品不存在')
54
-  
55
-  try:
56
-    goods_info = liveGoodsInfo.objects.get(goods_id=goods_id)
57
-  except:
58
-    return response(400001, 'Live Goods Not Found', '直播商品不存在')
59
-
60
-  return response(200, 'Get Room Goods Detail Success', '获取直播间商品成功', data={
45
+    goods_id = get_query_value(request, 'goods_id', '')
46
+    room_id = get_query_value(request, 'room_id', '')
47
+
48
+    # 校验直播间和商品
49
+    try:
50
+        room_goods_info = RoomGoodsInfo.objects.get(goods_id=goods_id, room_id=room_id)
51
+    except RoomGoodsInfo.DoesNotExist:
52
+        return response(400001, 'Room Goods Not Found', '直播间商品不存在')
53
+
54
+    try:
55
+        goods_info = liveGoodsInfo.objects.get(goods_id=goods_id)
56
+    except liveGoodsInfo.DoesNotExist:
57
+        return response(400001, 'Live Goods Not Found', '直播商品不存在')
58
+
59
+    return response(200, 'Get Room Goods Detail Success', '获取直播间商品成功', data={
61 60
         'goods_info': {
62
-          'goods_img': goods_info.goods_img_url,
63
-          'name': goods_info.name,
64
-          'price_type': goods_info.price_type,
65
-          'price': goods_info.price,
66
-          'price2': goods_info.price2,
67
-          'goods_status': room_goods_info.goods_status,
68
-          'inventory': room_goods_info.inventory,
61
+            'goods_img': goods_info.goods_img_url,
62
+            'name': goods_info.name,
63
+            'price_type': goods_info.price_type,
64
+            'price': goods_info.price,
65
+            'price2': goods_info.price2,
66
+            'goods_status': room_goods_info.goods_status,
67
+            'inventory': room_goods_info.inventory,
69 68
         },
70 69
         'anchor_id': room_goods_info.anchor_id,
71
-      })
70
+    })
71
+
72 72
 
73 73
 def room_anchor_details(request):
74 74
     room_id = request.POST.get('room_id', '')
75 75
 
76 76
     try:
77 77
         room = RoomInfo.objects.get(room_id=room_id)
78
-    except:
78
+    except RoomInfo.DoesNotExist:
79 79
         return response()
80
-    
80
+
81 81
     try:
82 82
         anchor = AnchorInfo.objects.get(anchor_id=room.anchor_id)
83
-    except:
83
+    except AnchorInfo.DoesNotExist:
84 84
         return response()
85
-    
85
+
86 86
     rooms = RoomInfo.objects.filter(anchor_id=room.anchor_id)
87 87
     rooms = [room.anchorData for room in rooms]
88
-    
88
+
89 89
     return response(200, 'Get Room Anchor Details Success', '获取主播详情成功', data={
90 90
         'anchor': {
91 91
             'anchor_id': anchor.anchor_id,
@@ -97,6 +97,7 @@ def room_anchor_details(request):
97 97
         'rooms': rooms
98 98
     })
99 99
 
100
+
100 101
 @logit
101 102
 def live_order_create(request):
102 103
     """ 订单创建 """
@@ -121,32 +122,34 @@ def live_order_create(request):
121 122
     # 用户校验
122 123
     try:
123 124
         user = UserInfo.objects.get(user_id=user_id, status=True)
124
-        user.consignee_name = name
125
-        user.consignee_phone = phone
126
-        user.consignee_province = province
127
-        user.consignee_city = city
128
-        user.consignee_county = county
129
-        user.consignee_address = address
130
-        user.save()
131 125
     except UserInfo.DoesNotExist:
132 126
         return response(UserStatusCode.USER_NOT_FOUND)
133 127
 
128
+    user.consignee_name = name
129
+    user.consignee_phone = phone
130
+    user.consignee_province = province
131
+    user.consignee_city = city
132
+    user.consignee_county = county
133
+    user.consignee_address = address
134
+    user.save()
135
+
134 136
     # 校验直播间和商品
135 137
     try:
136 138
         room_goods_info = RoomGoodsInfo.objects.get(goods_id=goods_id, room_id=room_id, anchor_id=anchor_id)
137
-    except:
139
+    except RoomGoodsInfo.DoesNotExist:
138 140
         return response(400001, 'Room Goods Not Found', description='直播间商品不存在')
139 141
 
140
-    #库存校验
142
+    # 库存校验
141 143
     if room_goods_info.inventory <= 0:
142 144
         return response(400001, 'Room Goods Not En', description='商品库存不足')
143 145
 
144 146
     # 金额校验
145 147
     try:
146 148
         goods_info = liveGoodsInfo.objects.get(goods_id=goods_id)
147
-        if amount * int(goods_info.price if goods_info.price_type == 1 else goods_info.price2) != total_fee:
148
-            return response(404091, 'FEE Check Fail', description='金额校验失败')
149
-    except:
149
+    except liveGoodsInfo.DoesNotExist:
150
+        return response(404091, 'FEE Check Fail', description='金额校验失败')
151
+
152
+    if amount * int(goods_info.price if goods_info.price_type == 1 else goods_info.price2) != total_fee:
150 153
         return response(404091, 'FEE Check Fail', description='金额校验失败')
151 154
 
152 155
     # 消库存
@@ -198,7 +201,6 @@ def live_order_create(request):
198 201
     order.save()
199 202
 
200 203
     wxpay_params = wxpay.jsapi.get_jsapi_params(prepay_id)
201
-    
202 204
 
203 205
     return response(200, 'Order Create Success', '订单创建成功', {
204 206
         'order_id': order.order_id,
@@ -206,6 +208,7 @@ def live_order_create(request):
206 208
         'wxpay_params': wxpay_params,
207 209
     })
208 210
 
211
+
209 212
 def live_order_cancel(request):
210 213
     user_id = request.POST.get('user_id', '')
211 214
     order_id = request.POST.get('order_id', '')
@@ -213,24 +216,26 @@ def live_order_cancel(request):
213 216
 
214 217
     try:
215 218
         order = RoomOrderInfo.objects.get(user_id=user_id, order_id=order_id, prepay_id=prepay_id)
216
-    except:
219
+    except RoomOrderInfo.DoesNotExist:
217 220
         return response(400001, 'Order Not Found', description='直播间订单不存在')
218
-    
221
+
219 222
     if order.pay_status == RoomOrderInfo.FAIL:
220 223
         return response(200, 'Order Cancel Success', '订单取消成功')
221
-    
224
+
222 225
     order.pay_status = RoomOrderInfo.FAIL
223 226
     order.save()
224
-    
227
+
225 228
     try:
226 229
         goods_info = RoomGoodsInfo.objects.get(room_id=order.room_id, goods_id=order.goods_id, anchor_id=order.anchor_id)
227
-        goods_info.inventory += order.amount
228
-        goods_info.save()
229
-    except:
230
+    except RoomGoodsInfo.DoesNotExist:
230 231
         return response(400001, 'Room Goods Not Found', description='直播间商品不存在')
231
-    
232
+
233
+    goods_info.inventory += order.amount
234
+    goods_info.save()
235
+
232 236
     return response(200, 'Order Cancel Success', '订单取消成功')
233 237
 
238
+
234 239
 def order_paid_success(order):
235 240
     if order.pay_status == RoomOrderInfo.PAID:
236 241
         return
@@ -241,11 +246,13 @@ def order_paid_success(order):
241 246
 
242 247
     try:
243 248
         goods_info = RoomGoodsInfo.objects.get(room_id=order.room_id, goods_id=order.goods_id, anchor_id=order.anchor_id)
244
-        goods_info.sale_infos += [order.order_id]
245
-        goods_info.save()
246
-    except:
249
+    except RoomGoodsInfo.DoesNotExist:
247 250
         return
248 251
 
252
+    goods_info.sale_infos += [order.order_id]
253
+    goods_info.save()
254
+
255
+
249 256
 def order_paid_fail(order):
250 257
     if order.pay_status == RoomGoodsInfo.FAIL:
251 258
         return
@@ -255,11 +262,13 @@ def order_paid_fail(order):
255 262
 
256 263
     try:
257 264
         goods_info = RoomGoodsInfo.objects.get(room_id=order.room_id, goods_id=order.goods_id, anchor_id=order.anchor_id)
258
-        goods_info.inventory += order.amount
259
-        goods_info.save()
260
-    except:
265
+    except RoomGoodsInfo.DoesNotExist:
261 266
         return
262 267
 
268
+    goods_info.inventory += order.amount
269
+    goods_info.save()
270
+
271
+
263 272
 @logit
264 273
 @transaction.atomic
265 274
 def notify_url_api(request):

+ 21 - 22
pay/views.py

@@ -17,12 +17,11 @@ from TimeConvert import TimeConvert as tc
17 17
 from account.models import UserInfo
18 18
 from goods.models import GoodsInfo, PackGoodsInfo, PackGoodsSaleInfo, PackInfo
19 19
 from kol.models import KOLInfo
20
-from pay.models import OrderInfo
20
+from live import views as live_views
21 21
 from live.models import RoomOrderInfo
22
+from pay.models import OrderInfo
22 23
 from utils.error.errno_utils import KOLStatusCode, OrderStatusCode, PackGoodsStatusCode, PackStatusCode, UserStatusCode
23 24
 
24
-from live import views as live_views
25
-
26 25
 
27 26
 WECHAT = settings.WECHAT
28 27
 
@@ -82,7 +81,7 @@ def wx_order_create_api(request):
82 81
         except GoodsInfo.DoesNotExist:
83 82
             continue
84 83
         amount = amount + good.price * g.get('num', 0)
85
-    
84
+
86 85
     if amount != total_fee:
87 86
         return response(OrderStatusCode.FEE_CHECK_FAIL)
88 87
 
@@ -145,6 +144,7 @@ def wx_order_create_api(request):
145 144
         'wxpay_params': wxpay_params,
146 145
     })
147 146
 
147
+
148 148
 def order_cancel(request):
149 149
     user_id = request.POST.get('user_id', '')
150 150
     order_id = request.POST.get('order_id', '')
@@ -152,15 +152,15 @@ def order_cancel(request):
152 152
 
153 153
     try:
154 154
         order = OrderInfo.objects.get(user_id=user_id, order_id=order_id, prepay_id=prepay_id)
155
-    except:
155
+    except OrderInfo.DoesNotExist:
156 156
         return response()
157
-    
157
+
158 158
     if order.pay_status == OrderInfo.FAIL:
159 159
         return response(200, 'Order Cancel Success', '订单取消成功')
160
-    
160
+
161 161
     order.pay_status = OrderInfo.FAIL
162 162
     order.save()
163
-    
163
+
164 164
     for g in order.goods_info:
165 165
         try:
166 166
             good = PackGoodsInfo.objects.get(pack_id=order.pack_id, good_id=g.get('good_id', ''))
@@ -168,9 +168,10 @@ def order_cancel(request):
168 168
             good.save()
169 169
         except PackGoodsInfo.DoesNotExist:
170 170
             continue
171
-    
171
+
172 172
     return response(200, 'Order Cancel Success', '订单取消成功')
173 173
 
174
+
174 175
 def order_paid_success(order):
175 176
     if order.pay_status == OrderInfo.PAID:
176 177
         return
@@ -218,22 +219,20 @@ def wx_notify_url_api(request):
218 219
     if not success:
219 220
         return HttpResponse(WXPAY_NOTIFY_FAIL)
220 221
 
221
-    #尖货接龙订单
222
+    # 尖货接龙订单
222 223
     try:
223 224
         order = OrderInfo.objects.select_for_update().get(order_id=notify_data.get('out_trade_no', ''), status=True)
224
-        order.notify_msg = request.body
225
-        order.transaction_id = notify_data.get('transaction_id', '')
226
-        order.save()
227
-
228
-        result_code = notify_data.get('result_code', '')
229
-        if result_code == 'SUCCESS':
230
-            order_paid_success(order)
231
-        else:
232
-            order_paid_fail(order)
233
-        
234
-        return HttpResponse(WXPAY_NOTIFY_SUCCESS)
235
-    except:
225
+    except OrderInfo.DoesNotExist:
236 226
         return HttpResponse(WXPAY_NOTIFY_FAIL)
237 227
 
228
+    order.notify_msg = request.body
229
+    order.transaction_id = notify_data.get('transaction_id', '')
230
+    order.save()
231
+
232
+    result_code = notify_data.get('result_code', '')
233
+    if result_code == 'SUCCESS':
234
+        order_paid_success(order)
235
+    else:
236
+        order_paid_fail(order)
238 237
 
239 238
     return HttpResponse(WXPAY_NOTIFY_SUCCESS)