support wx logistics

FFIB 5 ans auparavant
Parent
Commettre
5a5e203f3b
3 fichiers modifiés avec 101 ajouts et 2 suppressions
  1. 97 1
      api/admin_views.py
  2. 3 1
      api/urls.py
  3. 1 0
      live/models.py

+ 97 - 1
api/admin_views.py

@@ -17,7 +17,7 @@ from django.conf import settings
17 17
 from pywe_token import access_token
18 18
 from pywe_storage import RedisStorage
19 19
 
20
-from account.models import AdministratorInfo
20
+from account.models import AdministratorInfo, UserInfo
21 21
 from goods.models import GoodsInfo, PackInfo
22 22
 from kol.models import KOLInfo
23 23
 from pay.models import OrderInfo
@@ -337,6 +337,102 @@ def live_order_list(request):
337 337
     })
338 338
 
339 339
 @logit(res=True)
340
+def live_order_delivery(request):
341
+    admin_id = request.POST.get('admin_id', '')
342
+    order_id = request.POST.get('order_id', '')
343
+    user_id = request.POST.get('user_id', '')
344
+    
345
+    delivery_id = request.POST.get('delivery_id', '')
346
+    biz_id = request.POST.get('biz_id', '')
347
+
348
+    try:
349
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
350
+    except AdministratorInfo.DoesNotExist:
351
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
352
+    
353
+    user = UserInfo.objects.get(user_id=user_id, status=True)
354
+
355
+    order = RoomOrderInfo.objects.get(order_id=order_id, status=True)
356
+
357
+    goods = liveGoodsInfo.objects.get(goods_id=order.goods_id, status=True)
358
+    
359
+    wxcfg = WECHAT.get('MINIAPP', {})
360
+
361
+    appid = wxcfg.get('appID')
362
+    secret = wxcfg.get('appsecret')
363
+    token = access_token(appid, secret)
364
+
365
+    data = {
366
+        'add_source': 0,
367
+        'order_id': order_id,
368
+        'openid': user.openid,
369
+        'delivery_id': delivery_id,
370
+        'biz_id': biz_id,
371
+        'custom_remark': goods.name + ' x' + str(order.amount),
372
+        'sender': {
373
+            'name': '孔令朋',
374
+            'tel': '15117949737',
375
+            'company': '',
376
+            'province': '北京市',
377
+            'city': '北京市',
378
+            'area': '海淀区',
379
+            'address': '四季青路8号郦城工作区地下一层1号门',
380
+        },
381
+        'receiver': {
382
+            'name': order.name,
383
+            'tel': order.phone,
384
+            'company': '',
385
+            'province': order.province,
386
+            'city': order.city,
387
+            'area': order.county,
388
+            'address': order.address,
389
+        },
390
+        'cargo': {
391
+            'count': 1,
392
+            'weight': 5,
393
+            'spaceX': 10,
394
+            'spaceY': 10,
395
+            'spaceZ': 10,
396
+            'detail_list': [{
397
+            'name': goods.name,
398
+            'count': order.amount,
399
+            }]
400
+        },
401
+        'shop': {
402
+            'wxa_path': 'pages/live/anchorHome/anchorHome?anchor_id='+order.anchor_id,
403
+            'img_url': goods.goods_img_url,
404
+            'goods_name': goods.name,
405
+            'goods_count': order.amount,
406
+        },
407
+        'insured': {
408
+            'use_insured': 0,
409
+            'insured_value': 0,
410
+        },
411
+        'service': {
412
+            'service_type': 3,
413
+            'service_name': '顺丰标快',
414
+        },
415
+        'expect_time': 0
416
+    }
417
+
418
+    res = requests.post(url=('https://api.weixin.qq.com/cgi-bin/express/business/order/add?access_token=' + token), data=json.dumps(data, ensure_ascii=False).encode("utf-8")).text
419
+    res = json.loads(res)
420
+    errCode = res.get('errcode', 0)
421
+
422
+    if errCode != 0:
423
+        errMsg = res.get('errmsg', '')
424
+        deliveryResultcode = res.get('delivery_resultcode', '')
425
+        deliveryResultmsg = res.get('delivery_resultmsg', '')
426
+        return response(errCode, errMsg, str(deliveryResultcode) + ':' + deliveryResultmsg)
427
+    
428
+    order.tracking_number = res.get('waybill_id', '')
429
+    order.save()
430
+    
431
+    return response(200, 'Live Order Delivery Success', '直播订单下单成功', data={
432
+        'order': order.admindata
433
+    })
434
+
435
+@logit(res=True)
340 436
 def fetch_wx_room_list(request):
341 437
     admin_id = request.POST.get('admin_id', '')
342 438
     try:

+ 3 - 1
api/urls.py

@@ -51,7 +51,9 @@ urlpatterns += [
51 51
     url(r'^admin/live/goods/audit$', admin_views.live_goods_audit, name='live_goods_audit'),
52 52
 
53 53
     url(r'^admin/live/room/list$', admin_views.live_room_list, name='live_room_list'),   # 直播间列表
54
-    url(r'^admin/live/order/list$', admin_views.live_order_list, name='live_order_list'),   # 直播间列表
54
+
55
+    url(r'^admin/live/order/list$', admin_views.live_order_list, name='live_order_list'),   # 直播间订单列表
56
+    url(r'^admin/live/order/delivery$', admin_views.live_order_delivery, name='live_order_delivery'),   # 直播间订单发货
55 57
 
56 58
     #微信直播 api
57 59
     url(r'^admin/live/wx/room/list$', admin_views.fetch_wx_room_list, name='fetch_wx_room_list'),   # 微信直播间列表

+ 1 - 0
live/models.py

@@ -301,6 +301,7 @@ class RoomOrderInfo(BaseModelMixin):
301 301
             'county': self.county,
302 302
             'address': self.address,
303 303
             'tracking_number': self.tracking_number,
304
+            'amount': self.amount,
304 305
             'total_fee': self.total_fee,
305 306
             'pay_status': self.pay_status,
306 307
             'paid_at': tc.local_string(utc_dt=self.paid_at, format='%Y-%m-%d %H:%M'),