예제 #1
0
파일: util.py 프로젝트: chengdg/weizoom
def update_models_use_webapp_user(current_webapp_user, expired_webapp_user):
    if current_webapp_user is None and expired_webapp_user is None:
        return None
    from mall.models import Order
    if current_webapp_user.webapp_id == expired_webapp_user.webapp_id:
        Order.by_webapp_user_id(expired_webapp_user.id).filter(
            webapp_id=current_webapp_user.webapp_id).update(
                webapp_user_id=current_webapp_user.id)
예제 #2
0
파일: views.py 프로젝트: chengdg/weizoom
def __get_member_orders(member):
	if member is None:
		return None

	webapp_user = WebAppUser.from_member(member)
	if webapp_user is None:
		notify_message = u"获取会员对应webappuser失败,member id:{}".format(member.id)
		watchdog_error(notify_message)
		return None
	
	return Order.by_webapp_user_id(webapp_user.id).order_by("-created_at")
예제 #3
0
def _is_buyed(member):
    webapp_user = WebAppUser.from_member(member)

    #这种方式无法正确的判断是否购买过, 如果数据被删除则积分计算会出现问题    by bert
    # if webapp_user:
    # 	return webapp_user.has_purchased
    # else:
    # 	return False
    if webapp_user:
        return True if Order.by_webapp_user_id(webapp_user.id).filter(
            status__gte=2).count() > 0 else False
    else:
        return False
예제 #4
0
    def api_get(request):
        webapp_id = request.user_profile.webapp_id
        member_id = request.GET.get('id', None)
        cur_page = int(request.GET.get('page', '1'))
        count = int(request.GET.get('count_per_page', COUNT_PER_PAGE))
        orders = []
        if member_id:
            member = Member.objects.get(id=member_id, webapp_id=webapp_id)
            webapp_user_ids = member.get_webapp_user_ids
            orders = Order.by_webapp_user_id(webapp_user_ids).order_by(
                "-created_at", "-id")

            pay_money = 0
            orders_valid = orders.filter(status=ORDER_STATUS_SUCCESSED)
            for order in orders_valid:
                order_final_price = order.final_price + order.weizoom_card_money
                pay_money += order_final_price
            total_count = orders.count()
            pageinfo, orders = paginator.paginate(orders, cur_page, count)

        items = []
        for order in orders:
            items.append({
                "id":
                order.id,
                "order_id":
                order.order_id,
                "final_price":
                float('%.2f' % (order.final_price + order.weizoom_card_money)),
                "created_at":
                datetime.strftime(order.created_at, '%Y-%m-%d %H:%M:%S'),
                "order_status":
                order.status,
            })
        response = create_response(200)
        response.data = {
            'items': items,
            'pageinfo': paginator.to_dict(pageinfo),
            'pay_money': '%.2f' % pay_money,
        }
        return response.get_response()
예제 #5
0
def _is_buyed(member):
    return True if Order.by_webapp_user_id(member.get_webapp_user_ids).filter(
        status__gte=2).count() > 0 else False
예제 #6
0
def get_channel_qrcode_stats(setting_id):
    """
	渠道扫码的分析结果
	"""
    relations = ChannelQrcodeHasMember.objects.filter(
        channel_qrcode=setting_id, is_new=True)
    member_num = relations.count()
    member_with_order_num = 0
    order_num = 0
    order_amount = 0.0
    repurchase_member_num = 0
    repurchase_order_num = 0
    repurchase_order_amount = 0.0

    for relation in relations:
        orders = Order.by_webapp_user_id(
            relation.member.get_webapp_user_ids).filter(
                status__in=QUALIFIED_ORDER_STATUS).order_by('created_at')
        order_count = orders.count()
        if order_count > 0:
            total_paid_amount = 0.0
            first_paid_amount = None
            for order in orders:
                current_paid_amount = float(order.final_price) + float(
                    order.weizoom_card_money)
                total_paid_amount += current_paid_amount
                if first_paid_amount == None:
                    first_paid_amount = current_paid_amount

            order_amount += total_paid_amount
            member_with_order_num += 1
            order_num += order_count
            if order_count >= 2:
                repurchase_member_num += 1
                # 复购订单统计不计第一张订单
                repurchase_order_num += order_count - 1
                repurchase_order_amount += total_paid_amount - first_paid_amount

    if member_num > 0:
        transform_ratio = "%.2f%%" % float(
            float(member_with_order_num) / float(member_num) * 100)
    else:
        transform_ratio = '0.00%'
    # 被推荐用户数
    stats = [{
        "name": "被推荐用户数",
        "value": member_num
    }, {
        "name": "被推荐用户下单人数",
        "value": member_with_order_num
    }, {
        "name": "被推荐用户下单单数",
        "value": order_num
    }, {
        "name": "被推荐用户下单金额",
        "value": '%.2f' % order_amount
    }, {
        "name": "推荐扫码下单转换率",
        "value": transform_ratio
    }, {
        "name": "复购用户数",
        "value": repurchase_member_num
    }, {
        "name": "复购订单数",
        "value": repurchase_order_num
    }, {
        "name": "复购总金额",
        "value": '%.2f' % repurchase_order_amount
    }]
    return stats
예제 #7
0
def auto_update_grade(webapp_user_id=None,
                      member=None,
                      delete=False,
                      **kwargs):
    """
    :param webapp_user_id:
    :param member:
    :param delete:
    :param kwargs:
    :return:是否改变了等级
    """
    is_change = False
    if webapp_user_id:
        member = WebAppUser.get_member_by_webapp_user_id(webapp_user_id)
        if not isinstance(member, Member):
            return
    if not member:
        return False
    if not member.grade.is_auto_upgrade and not delete:
        return is_change

    webapp_id = member.webapp_id
    webapp_owner_id = webapp_models.WebApp.objects.get(
        appid=webapp_id).owner_id
    webapp_user_ids = member.get_webapp_user_ids

    # 获取会员数据
    paid_orders = Order.by_webapp_user_id(webapp_user_ids).filter(
        status=mall_models.ORDER_STATUS_SUCCESSED, origin_order_id__lte=0)
    pay_times = paid_orders.count()
    bound = member.experience
    pay_money = 0
    for order in paid_orders:
        pay_money += order.get_final_price(
            webapp_id) + order.weizoom_card_money

    if delete:
        grades_list = MemberGrade.objects.filter(
            webapp_id=webapp_id,
            is_auto_upgrade=True).exclude(id=member.grade_id).order_by('-id')
    else:
        grades_list = MemberGrade.objects.filter(
            webapp_id=webapp_id, is_auto_upgrade=True,
            id__gt=member.grade_id).order_by('-id')
    from cache.webapp_owner_cache import get_webapp_owner_info
    # 此处import写在文件头会报错
    is_all_conditions = get_webapp_owner_info(
        webapp_owner_id).integral_strategy_settings.is_all_conditions

    # 计算条件
    if is_all_conditions:
        for grade in grades_list:
            # if pay_money >= grade.pay_money and pay_times >= grade.pay_times and bound >= grade.upgrade_lower_bound:
            if pay_money >= grade.pay_money and pay_times >= grade.pay_times:
                is_change = True
                new_grade = grade
                break
    else:
        for grade in grades_list:
            # if pay_money >= grade.pay_money or pay_times >= grade.pay_times or bound >= grade.upgrade_lower_bound:
            if pay_money >= grade.pay_money or pay_times >= grade.pay_times:
                is_change = True
                new_grade = grade
                break
    if is_change:
        Member.objects.filter(id=member.id).update(grade=new_grade)
    return is_change
예제 #8
0
def get_member_orders(member):
    if member is None:
        return None
    webapp_user_ids = member.get_webapp_user_ids
    return Order.by_webapp_user_id(webapp_user_ids).order_by("-created_at")