No Description

admin_views.py 16KB

    # -*- coding: utf-8 -*- import logging import requests import json from django.core.paginator import Paginator from django.contrib.auth.hashers import check_password from django.db import transaction from django.db.models import Q from django_logit import logit from django_response import response from django.core.files import File from TimeConvert import TimeConvert as tc from django.conf import settings from pywe_token import access_token from pywe_storage import RedisStorage from account.models import AdministratorInfo, UserInfo from goods.models import GoodsInfo, PackInfo from kol.models import KOLInfo from pay.models import OrderInfo from live.models import RoomInfo, RoomGoodsInfo, RoomOrderInfo, AnchorInfo, liveGoodsInfo from utils.error.errno_utils import AdministratorStatusCode, OrderStatusCode from utils.redis.connect import r logger = logging.getLogger('logit') WECHAT = settings.WECHAT @logit(res=True) def login(request): name = request.POST.get('name', '') password = request.POST.get('password', '') try: administrator = AdministratorInfo.objects.get(name=name, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) if administrator.user_status == AdministratorInfo.DISABLED: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_ACTIVATED) elif administrator.user_status == AdministratorInfo.DELETED: return response(AdministratorStatusCode.ADMINISTRATOR_HAS_DELETED) if not check_password(password, administrator.encryption): return response(AdministratorStatusCode.ADMINISTRATOR_PASSWORD_ERROR) request.session['admin_id'] = administrator.admin_id return response(200, 'Admin Login Success', '管理员登录成功', data={ 'admin_id': administrator.admin_id, 'admin_type': administrator.admin_type, }) @logit(res=True) def order_list(request): admin_id = request.POST.get('admin_id', '') kol_id = request.POST.get('kol_id', '') pack_id = request.POST.get('pack_id', '') ftime = request.POST.get('ftime', '') ttime = request.POST.get('ttime', '') query = request.POST.get('query', '') page = request.POST.get('page', 0) num = request.POST.get('num', 20) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) infos = OrderInfo.objects.filter( Q(phone__contains=query) | Q(name__contains=query) & Q(kol_id__contains=kol_id) & Q( pack_id__contains=pack_id) & Q(pay_status=1)).order_by('-paid_at') res = [] for info in infos: goods_info = [] try: pack = PackInfo.objects.get(pack_id=info.pack_id) except PackInfo.DoesNotExist: continue try: kol = KOLInfo.objects.get(kol_id=info.kol_id) except KOLInfo.DoesNotExist: continue for g in info.goods_info: try: goods = GoodsInfo.objects.get(good_id=g.get('good_id', '')) except GoodsInfo.DoesNotExist: continue goods_info.append({ 'title': goods.title, 'num': g.get('num', 0) }) res.append({ 'name': info.name, 'phone': info.phone, 'address': info.address, 'paid_at': tc.local_string(utc_dt=info.paid_at, format='%Y-%m-%d %H:%M'), 'order_id': info.order_id, 'transaction_id': info.transaction_id, 'tracking_number': info.tracking_number, 'goods_info': goods_info, 'kol_name': kol.name, 'pack_title': pack.title }) return response(200, 'Order List Success', '获取订单列表成功', { 'orders': res }) @logit(res=True) @transaction.atomic def order_update(request): admin_id = request.POST.get('admin_id', '') order_id = request.POST.get('order_id', '') tracking_number = request.POST.get('tracking_number', '') try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) try: order = OrderInfo.objects.get(order_id=order_id) except OrderInfo.DoesNotExist: return response(OrderStatusCode.ORDER_NOT_FOUND) order.tracking_number = tracking_number order.save() return response(200, 'Order Update Success', '订单更新成功') @logit(res=True) def live_goods_list(request): admin_id = request.POST.get('admin_id', '') page = request.POST.get('page', 1) num = request.POST.get('num', 20) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) goods_list = liveGoodsInfo.objects.filter(status=True).order_by('-created_at') count = goods_list.count() goods_list = Paginator(goods_list, num).get_page(page) goods_list = [goods.admindata for goods in goods_list] return response(200, 'Live Goods Success', u'直播商品库获取成功', data={ 'goods_list': goods_list, 'count': count, }) @logit(res=True) def live_goods_create(request): admin_id = request.POST.get('admin_id', '') goods_name = request.POST.get('goods_name', '') goods_img = request.POST.get('goods_img', '') price_type = int(request.POST.get('price_type', 1)) price = int(request.POST.get('price', 0)) price2 = int(request.POST.get('price2', 0)) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') token = access_token(appid, secret) media = requests.post(url=('https://api.weixin.qq.com/cgi-bin/media/upload?access_token=' + token + '&type=image'), files={'media': open(settings.MEDIA_ROOT + '/' + goods_img, 'rb')}).text media_id = json.loads(media).get('media_id', '') if media_id == '': return response() goods_info, _ = liveGoodsInfo.objects.get_or_create( name=goods_name, coverImgUrl=media_id, price_type=price_type, price=price, price2=price2, goods_img=goods_img ) data ={ "goodsInfo": { 'name': goods_name, 'coverImgUrl': media_id, 'priceType': price_type, 'price': price, 'price2': price2, 'url': 'pages/live/order/order?goods_id=' + goods_info.goods_id, } } wx_goods = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=' + token), json=data).text wx_goods = json.loads(wx_goods) goods_info.wx_goods_id = wx_goods.get('goodsId', '') goods_info.audit_id = wx_goods.get('auditId', '') goods_info.url = 'pages/live/order/order?goods_id=' + goods_info.goods_id, goods_info.save() return response(200, 'Live Goods Create Success', u'直播商品库创建成功', data={ 'goods': goods_info.admindata, }) @logit(res=True) def live_goods_audit(request): admin_id = request.POST.get('admin_id', '') try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') token = access_token(appid, secret) goods_infos = liveGoodsInfo.objects.exclude(audit_status=2) wx_goods_ids = [goods.wx_goods_id for goods in goods_infos] data = { "goods_ids": wx_goods_ids } wx_goods_infos = requests.post(url=('https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=' + token), json=data).text wx_goods_infos = json.loads(wx_goods_infos).get('goods', []) for goods in wx_goods_infos: g = liveGoodsInfo.objects.get(wx_goods_id=goods.get('goods_id', ''), status=True) g.audit_status = goods.get('audit_status', 0) g.save() return response(200, 'Live Goods Audit Success', '获取直播商品库审核状态成功') @logit(res=True) def live_goods_delete(request): admin_id = request.POST.get('admin_id', '') goods_id = request.POST.get('goods_id', '') wx_goods_id = request.POST.get('wx_goods_id', '') try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') token = access_token(appid, secret) status = requests.post(url=('https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=' + token), json={ 'goodsId': wx_goods_id}).text errcode = json.loads(status).get('errcode', -1) if errcode != 0: return response() try: liveGoodsInfo.objects.filter(goods_id=goods_id, status=True).update(status=False) except: return response() return response(200, 'Live Goods Delete Success', '直播商品库删除成功') @logit(res=True) def live_room_list(request): admin_id = request.POST.get('admin_id', '') page = request.POST.get('page', 1) num = request.POST.get('num', 20) try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) rooms = RoomInfo.objects.all() count = rooms.count() rooms = Paginator(rooms, num).get_page(page) rooms = [room.admindata for room in rooms] return response(200, 'Live Goods Success', u'直播商品库获取成功', data={ 'rooms': rooms, 'count': count, }) @logit(res=True) def live_order_list(request): admin_id = request.POST.get('admin_id', '') page = request.POST.get('page', 1) num = request.POST.get('num', 20) pay_status = request.POST.get('pay_status', '') query = request.POST.get('query', '') goods_name = request.POST.get('goods_name', '') try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) orders = RoomOrderInfo.objects.filter(Q(name__contains=query) | Q(phone__contains=query)).order_by('-created_at') if pay_status: orders = orders.filter(pay_status=pay_status) if goods_name: goods_infos = liveGoodsInfo.objects.filter(goods_name__contains=goods_name) goods_infos = [info.goods_id for info in goods_infos] orders = orders.filter(goods_id__in=goods_infos) count = orders.count() orders = Paginator(orders, num).get_page(page) orders = [order.admindata for order in orders] return response(200, 'Live Goods Success', u'直播商品库获取成功', data={ 'orders': orders, 'count': count, }) @logit(res=True) def live_order_delivery(request): admin_id = request.POST.get('admin_id', '') order_id = request.POST.get('order_id', '') user_id = request.POST.get('user_id', '') delivery_id = request.POST.get('delivery_id', '') biz_id = request.POST.get('biz_id', '') try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) user = UserInfo.objects.get(user_id=user_id, status=True) order = RoomOrderInfo.objects.get(order_id=order_id, status=True) goods = liveGoodsInfo.objects.get(goods_id=order.goods_id, status=True) wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') token = access_token(appid, secret) data = { 'add_source': 0, 'order_id': order_id, 'openid': user.openid, 'delivery_id': delivery_id, 'biz_id': biz_id, 'custom_remark': goods.name + ' x' + str(order.amount), 'sender': { 'name': '孔令朋', 'tel': '15117949737', 'company': '', 'province': '北京市', 'city': '北京市', 'area': '海淀区', 'address': '四季青路8号郦城工作区地下一层1号门', }, 'receiver': { 'name': order.name, 'tel': order.phone, 'company': '', 'province': order.province, 'city': order.city, 'area': order.county, 'address': order.address, }, 'cargo': { 'count': 1, 'weight': 5, 'spaceX': 10, 'spaceY': 10, 'spaceZ': 10, 'detail_list': [{ 'name': goods.name, 'count': order.amount, }] }, 'shop': { 'wxa_path': 'pages/live/anchorHome/anchorHome?anchor_id='+order.anchor_id, 'img_url': goods.goods_img_url, 'goods_name': goods.name, 'goods_count': order.amount, }, 'insured': { 'use_insured': 0, 'insured_value': 0, }, 'service': { 'service_type': 3, 'service_name': '顺丰标快', }, 'expect_time': 0 } 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 res = json.loads(res) errCode = res.get('errcode', 0) if errCode != 0: errMsg = res.get('errmsg', '') deliveryResultcode = res.get('delivery_resultcode', '') deliveryResultmsg = res.get('delivery_resultmsg', '') return response(errCode, errMsg, str(deliveryResultcode) + ':' + deliveryResultmsg) order.tracking_number = res.get('waybill_id', '') order.save() return response(200, 'Live Order Delivery Success', '直播订单下单成功', data={ 'order': order.admindata }) @logit(res=True) def fetch_wx_room_list(request): admin_id = request.POST.get('admin_id', '') try: administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) except AdministratorInfo.DoesNotExist: return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) wxcfg = WECHAT.get('MINIAPP', {}) appid = wxcfg.get('appID') secret = wxcfg.get('appsecret') token = access_token(appid, secret) rooms = RoomInfo.objects.exclude(Q(live_status=101) | Q(live_status=102)) start = 0 if rooms.count() != 0: start = int(rooms[0].room_id) - 1 roominfos = requests.post(url=('http://api.weixin.qq.com/wxa/business/getliveinfo?access_token='+token), json={'start': 0, 'limit': 99}) roominfos = json.loads(roominfos.text).get('room_info', {}) for roominfo in roominfos: anchor, _ = AnchorInfo.objects.get_or_create( anchor_name=roominfo.get('anchor_name') ) room, _ = RoomInfo.objects.get_or_create( room_id=roominfo.get('roomid') ) room.name = roominfo.get('name', '') room.live_status = roominfo.get('live_status', '') room.start_time = roominfo.get('start_time', '') room.end_time = roominfo.get('end_time', '') room.wx_cover_img = roominfo.get('cover_img', '') room.wx_share_img = roominfo.get('share_img', '') room.anchor_name = roominfo.get('anchor_name', '') room.anchor_id = anchor.anchor_id room.save() return response(200, 'Fetch wx Room List Success', u'微信直播间列表获取成功')