Пример #1
0
def get_weizoom_card_rules(request):
	count_per_page = int(request.GET.get('count_per_page', '1'))
	cur_page = int(request.GET.get('page', '1'))
	weizoom_card_rule_id = int(request.GET.get('weizoom_card_rule_id', '-1'))
	
	weizoom_card_rules = WeizoomCardRule.objects.filter(owner=request.user).order_by('-created_at')
	pageinfo, weizoom_card_rules = paginator.paginate(weizoom_card_rules, cur_page, count_per_page, query_string=request.META['QUERY_STRING'])	
	
	cur_weizoom_card_rules = []
	for c in weizoom_card_rules:
		cur_weizoom_card_rule = JsonResponse()
		cur_weizoom_card_rule.id = c.id
		cur_weizoom_card_rule.name = c.name
		cur_weizoom_card_rule.count = c.count
		cur_weizoom_card_rule.remark = c.remark
		cur_weizoom_card_rule.money = '%.2f' % c.money
		cur_weizoom_card_rule.expired_time = datetime.strftime(c.expired_time, '%Y-%m-%d %H:%M')
		cur_weizoom_card_rule.created_at = datetime.strftime(c.created_at, '%Y-%m-%d %H:%M')
		cur_weizoom_card_rules.append(cur_weizoom_card_rule)
		
	response = create_response(200)
	response.data.items = cur_weizoom_card_rules
	response.data.sortAttr = request.GET.get('sort_attr', '-created_at')
	response.data.pageinfo = paginator.to_dict(pageinfo)
	
	return response.get_response()
Пример #2
0
def get_order(request):
    id = request.GET.get('id')
    order = Order.objects.get(id=id)
    order_has_products = OrderHasProduct.objects.filter(order=order)

    number = 0
    cur_order = JsonResponse()
    for order_has_product in order_has_products:
        number += order_has_product.number

    cur_order.number = number
    cur_order.statu = get_order_status_text(order.status)
    cur_order.express_company_name = get_name_by_value(
        order.express_company_name)
    cur_order.type = order.type
    cur_order.express_number = order.express_number
    cur_order.leader_name = order.leader_name
    cur_order.integral = order.integral
    cur_order.bill_type = order.bill_type
    cur_order.bill = order.bill
    cur_order.order_id = order.order_id
    cur_order.final_price = '%.2f' % order.final_price
    cur_order.postage = '%.2f' % order.postage
    cur_order.ship_name = order.ship_name
    cur_order.ship_tel = order.ship_tel
    cur_order.area = regional_util.get_str_value_by_string_ids(order.area)
    cur_order.ship_address = order.ship_address
    cur_order.customer_message = order.customer_message
    cur_order.created_at = __data_format(order.created_at)
    cur_order.action = get_order_actions(order)
    cur_order.reason = order.reason
    #关联的优惠券
    coupon = order.get_coupon()
    if coupon:
        cur_coupon = JsonResponse()
        cur_coupon.coupon_id = coupon.coupon_id
        cur_coupon.coupon_rule_name = coupon.coupon_rule.name
        cur_coupon.money = str(coupon.money)
        cur_order.coupon = cur_coupon
    else:
        cur_order.coupon = None

    products = mall_api.get_order_products(order)
    #商品
    cur_product_json = []
    for product in products:
        cur_product = JsonResponse()
        cur_product.name = product['name']
        cur_product.count = product['count']
        cur_product.total_price = product['total_price']
        cur_product.thumbnails_url = product['thumbnails_url']
        cur_product.is_deleted = product['is_deleted']
        properties = product['custom_model_properties']
        if properties:
            for product_property in properties:
                cur_product.property_name = product_property['name']
                cur_product.property_value = product_property['property_value']

        cur_product_json.append(cur_product)

    response = create_response(200)
    response.data.order = cur_order
    response.data.products = cur_product_json
    return response.get_jsonp_response(request)
Пример #3
0
def get_channel_qrcode_settings(request):
    """
	获取渠道扫码配置列表
	"""
    #处理搜索
    query = request.GET.get('query', '').strip()
    if query:
        settings = ChannelQrcodeSettings.objects.filter(owner=request.user,
                                                        name__contains=query)
    else:
        settings = ChannelQrcodeSettings.objects.filter(owner=request.user)

    setting_ids = [s.id for s in settings]
    relations = ChannelQrcodeHasMember.objects.filter(
        channel_qrcode_id__in=setting_ids)
    setting_id2count = {}
    member_id2setting_id = {}
    member_ids = []
    for r in relations:
        member_ids.append(r.member_id)
        member_id2setting_id[r.member_id] = r.channel_qrcode_id
        if r.channel_qrcode_id in setting_id2count:
            setting_id2count[r.channel_qrcode_id] += 1
        else:
            setting_id2count[r.channel_qrcode_id] = 1

    webapp_users = member_model.WebAppUser.objects.filter(
        member_id__in=member_ids)
    webapp_user_id2member_id = dict([(u.id, u.member_id)
                                     for u in webapp_users])
    webapp_user_ids = set(webapp_user_id2member_id.keys())
    orders = mall_model.Order.by_webapp_user_id(webapp_user_ids).filter(
        status=mall_model.ORDER_STATUS_SUCCESSED)
    member_id2total_final_price = {}
    for order in orders:
        member_id = webapp_user_id2member_id[order.webapp_user_id]
        if member_id in member_id2total_final_price:
            member_id2total_final_price[member_id] += order.final_price
        else:
            member_id2total_final_price[member_id] = order.final_price

    setting_id2total_final_price = {}
    for member_id in member_id2total_final_price.keys():
        final_price = member_id2total_final_price[member_id]
        setting_id = member_id2setting_id[member_id]
        if setting_id in setting_id2total_final_price:
            setting_id2total_final_price[setting_id] += final_price
        else:
            setting_id2total_final_price[setting_id] = final_price

    response = create_response(200)
    response.data.items = []
    items = []

    mp_user = get_binding_weixin_mpuser(request.user)
    mpuser_access_token = get_mpuser_accesstoken(mp_user)

    for setting in settings:
        cur_setting = JsonResponse()
        prize_info = decode_json_str(setting.award_prize_info)
        if prize_info['name'] == '_score-prize_':
            setting.cur_prize = '[%s]%d' % (prize_info['type'],
                                            prize_info['id'])
        elif prize_info['name'] == 'non-prize':
            setting.cur_prize = prize_info['type']
        else:
            setting.cur_prize = '[%s]%s' % (prize_info['type'],
                                            prize_info['name'])

        if setting.id in setting_id2count:
            setting.count = setting_id2count[setting.id]
        else:
            setting.count = 0
        if setting.id in setting_id2total_final_price:
            setting.total_final_price = setting_id2total_final_price[
                setting.id]
        else:
            setting.total_final_price = 0

        #如果没有ticket信息则获取ticket信息
        if not setting.ticket:
            try:
                if mp_user.is_certified and mp_user.is_service and mpuser_access_token.is_active:
                    weixin_api = get_weixin_api(mpuser_access_token)
                    qrcode_ticket = weixin_api.create_qrcode_ticket(
                        int(setting.id), QrcodeTicket.PERMANENT)

                    try:
                        ticket = qrcode_ticket.ticket
                    except:
                        ticket = ''
                    setting.ticket = ticket
                    setting.save()
            except:
                pass
        cur_setting.id = setting.id
        cur_setting.name = setting.name
        cur_setting.count = setting.count
        cur_setting.total_final_price = round(setting.total_final_price, 2)
        cur_setting.cur_prize = setting.cur_prize
        cur_setting.ticket = setting.ticket
        cur_setting.remark = setting.remark
        items.append(cur_setting)

    #进行分页
    response.data.sortAttr = request.GET.get('sort_attr', 'count')

    if '-' in response.data.sortAttr:
        sorter = response.data.sortAttr[1:]
        is_reverse = True
    else:
        sorter = response.data.sortAttr
        is_reverse = False
    items = sorted(items, reverse=is_reverse, key=lambda b: getattr(b, sorter))
    count_per_page = int(request.GET.get('count_per_page', 15))
    cur_page = int(request.GET.get('page', '1'))
    pageinfo, items = paginator.paginate(
        items,
        cur_page,
        count_per_page,
        query_string=request.META['QUERY_STRING'])

    #
    response.data.items = items
    response.data.pageinfo = paginator.to_dict(pageinfo)

    return response.get_response()
Пример #4
0
def _get_channel_qrcode_items(request):
    #处理搜索
    from mall.models import *
    query = request.GET.get('query', '').strip()
    sort_attr = request.GET.get('sort_attr', '-created_at')
    created_at = '-created_at'
    if 'created_at' in sort_attr:
        created_at = sort_attr

    setting = MemberChannelQrcodeSettings.objects.filter(owner=request.manager)

    if setting.count() > 0:
        member_channel_qrcodes = MemberChannelQrcode.objects.filter(
            member_channel_qrcode_setting=setting[0])
        if query:
            member_ids = [
                qrcode.member_id for qrcode in member_channel_qrcodes
            ]
            query_hex = byte_to_hex(query)
            members = member_model.Member.objects.filter(
                id__in=member_ids).filter(username_hexstr__contains=query_hex)
            member_ids = [m.id for m in members]
            member_channel_qrcodes = member_channel_qrcodes.filter(
                member_id__in=member_ids)
    else:
        return create_response(500).get_response()

    member_channel_qrcode_ids = [
        qrcode.id for qrcode in member_channel_qrcodes
    ]

    relations = MemberChannelQrcodeHasMember.objects.filter(
        member_channel_qrcode__in=member_channel_qrcode_ids)
    member_channel_qrcode_id2count = {}
    member_id2member_channel_qrcode_id = {}
    member_id2relation = {}
    member_ids = []
    for r in relations:
        member_ids.append(r.member_id)
        member_id2member_channel_qrcode_id[
            r.member_id] = r.member_channel_qrcode_id
        member_id2relation[r.member_id] = r
        if r.member_channel_qrcode_id in member_channel_qrcode_id2count:
            member_channel_qrcode_id2count[r.member_channel_qrcode_id] += 1
        else:
            member_channel_qrcode_id2count[r.member_channel_qrcode_id] = 1

    webapp_users = member_model.WebAppUser.objects.filter(
        member_id__in=member_ids)
    webapp_user_id2member_id = dict([(u.id, u.member_id)
                                     for u in webapp_users])
    webapp_user_ids = set(webapp_user_id2member_id.keys())
    orders = Order.by_webapp_user_id(webapp_user_ids).filter(
        status__in=(ORDER_STATUS_PAYED_SUCCESSED, ORDER_STATUS_PAYED_NOT_SHIP,
                    ORDER_STATUS_PAYED_SHIPED, ORDER_STATUS_SUCCESSED))

    member_id2total_final_price = {}
    member_id2cash_money = {}
    member_id2weizoom_card_money = {}
    for order in orders:
        member_id = webapp_user_id2member_id[order.webapp_user_id]
        if member_id2relation[member_id].is_new or member_id2relation[
                member_id].created_at <= order.created_at:
            if member_id in member_id2total_final_price:
                member_id2total_final_price[
                    member_id] += order.final_price + order.weizoom_card_money
                member_id2cash_money[member_id] += order.final_price
                member_id2weizoom_card_money[
                    member_id] += order.weizoom_card_money
            else:
                member_id2total_final_price[
                    member_id] = order.final_price + order.weizoom_card_money
                member_id2cash_money[member_id] = order.final_price
                member_id2weizoom_card_money[
                    member_id] = order.weizoom_card_money

    member_channel_qrcode_id2total_final_price = {}
    member_channel_qrcode_id2cash_money = {}
    member_channel_qrcode_id2weizoom_card_money = {}
    for member_id in member_id2total_final_price.keys():
        final_price = member_id2total_final_price[member_id]
        cash_money = member_id2cash_money[member_id]
        weizoom_card_money = member_id2weizoom_card_money[member_id]
        member_channel_qrcode_id = member_id2member_channel_qrcode_id[
            member_id]
        if member_channel_qrcode_id in member_channel_qrcode_id2total_final_price:
            member_channel_qrcode_id2total_final_price[
                member_channel_qrcode_id] += final_price
            member_channel_qrcode_id2cash_money[
                member_channel_qrcode_id] += cash_money
            member_channel_qrcode_id2weizoom_card_money[
                member_channel_qrcode_id] += weizoom_card_money
        else:
            member_channel_qrcode_id2total_final_price[
                member_channel_qrcode_id] = final_price
            member_channel_qrcode_id2cash_money[
                member_channel_qrcode_id] = cash_money
            member_channel_qrcode_id2weizoom_card_money[
                member_channel_qrcode_id] = weizoom_card_money

    response = create_response(200)
    #response.data.items = []
    items = []

    mp_user = get_binding_weixin_mpuser(request.manager)
    mpuser_access_token = get_mpuser_accesstoken(mp_user)

    for qrcode in member_channel_qrcodes:
        current_qrcode = JsonResponse()

        if qrcode.id in member_channel_qrcode_id2count:
            qrcode.count = member_channel_qrcode_id2count[qrcode.id]
        else:
            qrcode.count = 0
        if qrcode.id in member_channel_qrcode_id2total_final_price:
            qrcode.total_final_price = member_channel_qrcode_id2total_final_price[
                qrcode.id]
            qrcode.cash_money = member_channel_qrcode_id2cash_money[qrcode.id]
            qrcode.weizoom_card_money = member_channel_qrcode_id2weizoom_card_money[
                qrcode.id]
        else:
            qrcode.total_final_price = 0
            qrcode.cash_money = 0
            qrcode.weizoom_card_money = 0

        #如果没有ticket信息则获取ticket信息
        if not qrcode.ticket:
            try:
                if mp_user.is_certified and mp_user.is_service and mpuser_access_token.is_active:
                    weixin_api = get_weixin_api(mpuser_access_token)
                    qrcode_ticket = weixin_api.create_qrcode_ticket(
                        int(qrcode.id), QrcodeTicket.PERMANENT)

                    try:
                        ticket = qrcode_ticket.ticket
                    except:
                        ticket = ''
                    qrcode.ticket = ticket
                    qrcode.save()
            except:
                pass
        current_qrcode.id = qrcode.id
        current_qrcode.name = qrcode.member.username_for_html
        current_qrcode.count = qrcode.count
        current_qrcode.total_final_price = round(qrcode.total_final_price, 2)
        current_qrcode.ticket = qrcode.ticket
        current_qrcode.created_at = qrcode.created_at.strftime(
            '%Y-%m-%d %H:%M:%S')

        items.append(current_qrcode)
    return items
Пример #5
0
def get_cards(request):
    """
	卡规则列表 
	"""
    count_per_page = int(request.GET.get('count_per_page', '1'))
    cur_page = int(request.GET.get('page', '1'))
    card_name = request.GET.get('cardName', '').strip()
    weizoom_card_rule_id = int(request.GET.get('weizoom_card_rule_id', '-1'))
    weizoom_card_rules = WeizoomCardRule.objects.all().order_by('-created_at')
    weizoomcardpermission = WeiZoomCardPermission.objects.filter(
        user_id=request.user.id)
    can_export_batch_card = 0
    can_delay_card = 0
    if weizoomcardpermission:
        can_export_batch_card = weizoomcardpermission[0].can_export_batch_card
        can_delay_card = weizoomcardpermission[0].can_delay_card
    if card_name:
        weizoom_card_rules = weizoom_card_rules.filter(
            name__icontains=card_name)

    # 时间区间
    date_interval = request.GET.get('date_interval', '')
    if date_interval:
        date_interval = get_datetime_from_date_interval(date_interval)
        weizoom_card_rules = weizoom_card_rules.filter(
            valid_time_from__gte=date_interval[0],
            valid_time_to__lte=date_interval[1])

    filter_value = request.GET.get('filter_value', '')
    card_type = _get_type_value(filter_value)
    card_attr = _get_attr_value(filter_value)
    if card_type != -1:
        weizoom_card_rules = weizoom_card_rules.filter(card_type=card_type)
    if card_attr != -1:
        weizoom_card_rules = weizoom_card_rules.filter(card_attr=card_attr)

    #卡号区间查询
    card_num_min = request.GET.get('card_num_min', '')
    card_num_max = request.GET.get('card_num_max', '')

    if card_num_min or card_num_max:

        card_rule_ids = [int(r.id) for r in weizoom_card_rules]
        all_cards = WeizoomCard.objects.filter(
            weizoom_card_rule_id__in=card_rule_ids)
        rule_id2cards = {}

        for c in all_cards:
            card_rule_id = c.weizoom_card_rule_id
            if card_rule_id not in rule_id2cards:
                rule_id2cards[card_rule_id] = [c]
            else:
                rule_id2cards[card_rule_id].append(c)

        weizoom_card_id2rule_ids = {}

        for rule_id in rule_id2cards:
            for card in rule_id2cards[rule_id]:
                weizoom_card_id2rule_ids[card.weizoom_card_id] = rule_id

        card_num_set = set(int(i) for i in weizoom_card_id2rule_ids.keys())

        if card_num_min and card_num_max:
            max_num = int(card_num_max)
            min_num = int(card_num_min)
            search_set = set(range(min_num, max_num + 1))
        elif card_num_max:
            search_set = set([int(card_num_max)])
        elif card_num_min:
            search_set = set([int(card_num_min)])
        else:
            search_set = set([])
        result_set = search_set & card_num_set
        result_list = list(result_set)

        if len(result_list) > 0:
            filter_cards_id_list = []
            for card_num in result_list:
                filter_cards_id_list.append(u'%07d' % card_num)

            filter_rule_ids = []
            for card in filter_cards_id_list:
                r_id = weizoom_card_id2rule_ids[card]
                filter_rule_ids.append(r_id)
            filter_rule_ids = list(set(filter_rule_ids))
            weizoom_card_rules = weizoom_card_rules.filter(
                id__in=filter_rule_ids)
        if len(result_list) == 0:
            weizoom_card_rules = []

    pageinfo, weizoom_card_rules = paginator.paginate(
        weizoom_card_rules,
        cur_page,
        count_per_page,
        query_string=request.META['QUERY_STRING'])

    card_rule_ids = []
    user_ids = []
    for r in weizoom_card_rules:
        card_rule_ids.append(int(r.id))
        belong_to_owner_list = str(r.shop_limit_list).split(',')
        for a in belong_to_owner_list:
            if a != '-1':
                user_ids.append(a)
    user_id2store_name = {}
    user_profiles = UserProfile.objects.filter(user_id__in=user_ids)
    for user_profile in user_profiles:
        if user_profile.store_name:
            user_id2store_name[str(
                user_profile.user_id)] = user_profile.store_name

    all_cards = WeizoomCard.objects.filter(
        weizoom_card_rule_id__in=card_rule_ids)

    rule_id2card_ids = {}
    rule_id2cards = {}

    for c in all_cards:
        card_rule_id = c.weizoom_card_rule_id
        if card_rule_id not in rule_id2cards:
            rule_id2cards[card_rule_id] = [c]
        else:
            rule_id2cards[card_rule_id].append(c)

    for r_id in card_rule_ids:
        if r_id in rule_id2cards:
            weizoom_cards = rule_id2cards[r_id]
            weizoom_card_ids = [
                int(weizoom_cards[0].weizoom_card_id),
                int(weizoom_cards[::-1][0].weizoom_card_id)
            ]
            rule_id2card_ids[r_id] = weizoom_card_ids

    cur_weizoom_card_rules = []

    for rule in weizoom_card_rules:
        belong_to_owner_list2store_names = []
        belong_to_owner_list = str(rule.shop_limit_list).split(',')
        for a in belong_to_owner_list:
            if a != '-1':
                belong_to_owner_list2store_name = user_id2store_name.get(
                    a, None)
                belong_to_owner_list2store_names.append(
                    belong_to_owner_list2store_name)
        cur_weizoom_card_rule = JsonResponse()
        cur_weizoom_card_rule.id = rule.id
        cur_weizoom_card_rule.name = rule.name
        cur_weizoom_card_rule.count = rule.count
        cur_weizoom_card_rule.remark = rule.remark
        cur_weizoom_card_rule.money = '%.2f' % rule.money
        cur_weizoom_card_rule.card_type = rule.card_type
        cur_weizoom_card_rule.is_new_member_special = rule.is_new_member_special
        cur_weizoom_card_rule.card_attr = rule.card_attr
        cur_weizoom_card_rule.belong_to_owner = belong_to_owner_list2store_names
        cur_weizoom_card_rule.valid_time_from = rule.valid_time_from.strftime(
            '%Y-%m-%d %H:%M')
        cur_weizoom_card_rule.valid_time_to = rule.valid_time_to.strftime(
            '%Y-%m-%d %H:%M')
        cur_weizoom_card_rule.created_at = rule.created_at.strftime(
            '%Y-%m-%d %H:%M')
        #卡号区间
        try:
            weizoom_card_ids = rule_id2card_ids[cur_weizoom_card_rule.id]
            weizoom_card_id_start = weizoom_card_ids[0]
            weizoom_card_id_end = weizoom_card_ids[1]
            card_num_range = '%07d-%07d' % (weizoom_card_id_start,
                                            weizoom_card_id_end)
            cur_weizoom_card_rule.card_range = card_num_range
        except:
            pass

        # 卡类型
        if cur_weizoom_card_rule.card_type == WEIZOOM_CARD_EXTERNAL:
            cur_weizoom_card_rule.card_type = TYPE2NAME[
                'WEIZOOM_CARD_EXTERNAL']
        elif cur_weizoom_card_rule.card_type == WEIZOOM_CARD_INTERNAL:
            cur_weizoom_card_rule.card_type = TYPE2NAME[
                'WEIZOOM_CARD_INTERNAL']
        else:
            cur_weizoom_card_rule.card_type = TYPE2NAME['WEIZOOM_CARD_GIFT']
        cur_weizoom_card_rules.append(cur_weizoom_card_rule)

    response = create_response(200)
    response.data.items = cur_weizoom_card_rules
    response.data.sortAttr = request.GET.get('sort_attr', '-created_at')
    response.data.pageinfo = paginator.to_dict(pageinfo)
    response.data.can_delay_card = can_delay_card
    response.data.can_export_batch_card = can_export_batch_card
    return response.get_response()